Php 如何在这段代码中洗牌三个变量?

Php 如何在这段代码中洗牌三个变量?,php,arrays,variables,automated-tests,shuffle,Php,Arrays,Variables,Automated Tests,Shuffle,我有一个小问题,我试图做一个在线测试,但我需要洗牌answare所以 1是好的answare,2,3是坏的,但是所有的时间都是a=1b=2c=3,我想要一些随机的东西,比如a=2b=3C=1,我怎么能做到呢 代码如下: $result = mysql_query( "SELECT * FROM questions ORDER BY RAND() LIMIT 0,10"); while ($row = mysql_fetch_array($result)) { $rows[] = $row

我有一个小问题,我试图做一个在线测试,但我需要洗牌answare所以 1是好的answare,2,3是坏的,但是所有的时间都是a=1b=2c=3,我想要一些随机的东西,比如a=2b=3C=1,我怎么能做到呢

代码如下:

$result = mysql_query( "SELECT * FROM questions ORDER BY RAND() LIMIT 0,10");
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
    $question_id = $row['question_id'];
    $question = $row['question'];
    $answare_good = $row['answare_good'];
    $answare_badi = $row['answare_badi'];
    $answare_badii = $row['answare_badii'];
    $number += 1;
    echo '<tr>
    <td rowspan="3" width="10">'.$number.'</td>
    <td rowspan="3" width="70%"><p>'.$question.'</p></td>
    <td width="30%" height="33%"><input type="checkbox" name="a1" id="a1">
    '.$answare_good.'</td>
    </tr>
    <tr>
    <td width="30%" height="33%"><input type="checkbox" name="a2" id="a2">
    '.$answare_badi.'</td>
    </tr>
    <tr>
    <td  width="30%" height="33%"><input type="checkbox" name="a3" id="a3">
    '.$answare_badii.'</td>
    </tr>';
$result=mysql\u查询(“按兰德顺序从问题中选择*限制0,10”);
while($row=mysql\u fetch\u数组($result)){
$rows[]=$row;
$question_id=$row['question_id'];
$question=$row['question'];
$answare_good=$row['answare_good'];
$answare_badi=$row['answare_badi'];
$answare_badii=$row['answare_badii'];
$number+=1;
回声'
“.$number。”
“.$问题。”

“$answare\u很好。” “.$answare_badi” “.$answare_badii” ';

我尝试数组shuffle$answare\u good&$answare\u badi&$answare\u badii,但我失败了。

如果您需要可用的变量,您可以在shuffle中进行额外提取

$answers = array(
 'opt1' => 'answer1',
 'opt2' => 'answer2',
 'opt3' => 'answer3'
);

shuffle($answers);
extract($answers);
//访问变量

echo $opt1;
echo $opt2;
echo $opt3;
那么这个代码呢:

$result = mysql_query("SELECT * FROM questions ORDER BY RAND() LIMIT 0,10");
while ($row = mysql_fetch_array($result)) {
    $rows[] = $row;
    $question_id = $row['question_id'];

    $answers = array(
        array('a1', 'val1', $row['answare_good']),
        array('a2', 'val2', $row['answare_badi']),
        array('a3', 'val3', $row['answare_badii']),
    );
    shuffle($answers);

    $number += 1;

    echo '<tr>
    <td rowspan="3" width="10">'.$number.'</td>
    <td rowspan="3" width="70%"><p>'.$row['question'].'</p></td></tr>';
    foreach($answers as $answer) {
        echo '<tr><td width="30%" height="33%"><input type="checkbox" name="'.$answer[0].'" id="'.$question_id.'-'.$answer[0].'" value="'.$answer[1].'" />'.$answer[2].'</td></tr>';
    }
}
$result=mysql\u查询(“按兰德顺序从问题中选择*限制0,10”);
while($row=mysql\u fetch\u数组($result)){
$rows[]=$row;
$question_id=$row['question_id'];
$answers=数组(
数组('a1','val1',$row['answare\u good']),
数组('a2','val2',$row['answare_badi']),
数组('a3','val3',$row['answare_badii']),
);
洗牌(答案);
$number+=1;
回声'
“.$number。”
“.$行[“问题”]。

”; foreach($answers作为$answer){ 回显“.$answer[2]”; } }
您必须为复选框指定值,才能获得选中答案的值

也可以转到
PDO
或至少
mysqli.*
函数,因为
mysql.*
函数现在已不推荐使用


编辑:也可以考虑使用
收音机
而不是
复选框
——假设用户只需要选择一个答案。如果您想让用户选择多个(或全部三个答案),则
复选框
可以。

按兰德排序()
很管用,而且看起来不错,实际上这是一个坏把戏:它不可缩放。更好的方法是选择10个随机数,并在
限制中使用它。如果我不太清楚,我会说rowspan是魔鬼设计的属性!这是一个比我写的更好的解决方案,删除我的答案,然后对你的答案进行投票