如何使用foreach将我的数组中的答案洗牌?

时间:2017-02-03 13:41:16

标签: php arrays foreach shuffle

我正在制作一个测验应用程序,目前有一个遵循以下格式的表:

| id |     question     | option1 | option2 | option3 | answer |
--------------------------------------------------------
| 1  | What is my name? |  Dave   |   Bob   | Charles | Linda  |

我目前有这段代码,它可以正确输出我桌面上的所有信息:

<?php
//Connection code included above
$query="SELECT * FROM MatQuiz";                        

$result = mysql_query($query, $connect);

?>

<?php                                
    while($row = mysql_fetch_assoc($result)) {                                

       echo $row['id'] . '.  ';
       echo $row['question'] . '<br><br>';                           

?>

    <input type="radio" name="ID <?php $row['id']; ?>" value="<?php $row['option1']; ?>"><?php echo $row['option1'] ?><br>
    <input type="radio" name="ID <?php $row['id']; ?>" value="<?php $row['option2']; ?>"><?php echo $row['option2']; ?><br>
    <input type="radio" name="ID <?php $row['id']; ?>" value="<?php $row['option3']; ?>"><?php echo $row['option3']; ?><br>
    <input type="radio" name="ID <?php $row['id']; ?>" value="<?php $row['answer']; ?>"><?php echo $row['answer']; ?><br><br>

<?php

    }                            

?>

此代码以正确的顺序输出我的数据库表中的所有问题,以及相关的单选按钮和答案。

我想要做的是改变组织:

$row['option1'];
$row['option2'];
$row['option3'];
$row['answer'];

我知道我需要使用Foreach循环,并将$ row数组值分配给另一个数组并使用shuffle()函数。每当我这样做时,我都会遇到错误并说出无效的论点。

我如何改变答案的组织方式,以便每次都不会以相同的顺序显示答案?

1 个答案:

答案 0 :(得分:0)

对于每个数据库行,创建一个$ Options数组。将每行选项和答案添加到$ Options数组中。

然后使用shuffle($ Options):PHP Shuffle

然后使用forloop呈现$ Option值

<?php                                
while($row = mysql_fetch_assoc($result)) { 
$Options = array($row['option1'], $row['option2'], $row['option3'], $row['answer']); 
shuffle($Options);                        

   echo $row['id'] . '.  ';
   echo $row['question'] . '<br><br>';                           

foreach($Options as $Option){?>
    <input type="radio" name="ID <?php echo $row['id']; ?>" value="<?php echo $Option; ?>"><?php echo $Option; ?><br>
<?php }
}
?>