【问题标题】:Display one-column data randomly in MySQLMySQL中随机显示一列数据
【发布时间】:2021-12-23 02:45:57
【问题描述】:

我有一个包含许多记录的表。通过拖放输入中的文本,用户可以确定哪个文本适用于哪个输入或图像。

通常情况下,所有衰退都会按顺序显示,并且很清楚哪个答案适用于哪个图像。 我希望将列响应数据随机放置在每个图像的前面。

请注意,我不希望每一行都随机显示,但我希望一列中的数据随机显示。

id answer image
1 test1 test1.jpg
2 test2 test2.jpg

我希望 Test1 Title 显示在 test2 图片前面,Test2 Title 显示在 test1 图片前面。

我使用了以下代码,但没有改变:

$gg1 = "SELECT * FROM groupanswer WHERE id='$nowid' ";
$gg2=mysqli_query($conn,$gg1);
while($gg3=mysqli_fetch_assoc($gg2)){
    $iii=$gg3['answer'];
    $aa = array($iii);
    $key = array_rand($aa);
}

我附上了照片:

【问题讨论】:

标签: php random


【解决方案1】:

您可以简单地使用两个数组。一个将 id 作为索引,并将 answer 作为值。该数组将保持原始顺序。另一个数组也将 id 作为索引,但将 image 作为值。并且会随机重新排序。

$answers = [];
$images = [];
$query = "SELECT * FROM groupanswer WHERE id='" . (int) $nowid . "'";
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_assoc($result)) {
    $answers[$row['id']] = $row['answer'];
    $images[$row['id']] = $row['image'];
}

$randomOrder = array_keys
$images = shuffle_assoc($images); //Randomize order

//Demo echoing
foreach ($answers as $id => $answer) {
    echo $answer . ' - ' . $images[$id] . '<br />';
}

//Function to shuffle preserving indexes
function shuffle_assoc($list) { 
    $keys = array_keys($list); 
    shuffle($keys); 
    $random = array(); 
    foreach ($keys as $key) { 
        $random[$key] = $list[$key]; 
    }

    return $random;
} 

【讨论】:

  • tnx,但不起作用
  • 对不起,我忘记了 shuffle() 仅适用于数字(indexex)数组,对于关联数组它会丢失键。所以我添加了一个名为 shuffle_assoc() 的函数来进行混合(重新排序 ramdonly),如 stackoverflow.com/questions/4102777/… 所示
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2012-11-09
相关资源
最近更新 更多