【问题标题】:How to shuffle the answers in my array using a foreach?如何使用 foreach 对我的数组中的答案进行洗牌?
【发布时间】:2017-02-03 13:41:16
【问题描述】:

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

| 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() 函数。每当我这样做时,我都会遇到错误并说无效参数。

如何重新组织答案,使它们不会每次都以相同的顺序显示?

【问题讨论】:

  • 为什么不能直接使用$row['option1']之前的$row['option2']呢?
  • 为每个数据库行创建一个 $Options 数组。将每个行选项和答案添加到 $Options 数组。然后使用 shuffle($Options):php.net/manual/en/function.shuffle.php。然后使用 forloop 来呈现 $Option 值
  • Sunny,因为这样所有选项都会以相同的顺序出现,但首先从选项 2 开始
  • I encounter an error and says invalid argument 显示该代码并显示真正的错误。

标签: php arrays foreach shuffle


【解决方案1】:

对于每个数据库行,创建一个 $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 }
    }
?>

【讨论】:

  • 这不应被否决,因为它为问题提供了正确的解决方案。
  • 可能是因为没有说明你做了什么。
  • 很公平,我认为我之前对这个问题的评论就足够了。我会更新答案。感谢您的提示。
  • Justbaron,非常感谢您的帮助,对 php 来说还是个新手,所以正确地使用循环让我大开眼界。您的回答非常有效,谢谢。
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2021-11-28
  • 2017-10-17
  • 1970-01-01
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多