【问题标题】:How to shuffle three variables in this code?如何在这段代码中打乱三个变量?
【发布时间】:2013-01-01 03:31:33
【问题描述】:

我有一个小问题,我尝试进行在线测试,但我需要洗牌 answare 所以 1 是好的答案,2,3 不好,但总是出现 a = 1 b = 2 c = 3,我想要一些随机化的东西,比如 a=2 b=3 c=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>';

我尝试对 $answare_good & $answare_badi & $answare_badii 进行随机排列,但我失败了。

【问题讨论】:

  • 虽然ORDER BY RAND() 可以完成工作并且看起来不错,但它实际上是一个坏把戏:它无法扩展。更好的方法是选择 10 个随机数并将其用于您的 LIMIT
  • 如果我不知道更好,我会说rowspan是魔鬼设计的属性!

标签: php arrays variables automated-tests shuffle


【解决方案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'];

    $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>';
    }
}

您还必须为复选框指定值才能获得选中答案的值...

也移至PDO 或至少mysqli_* 函数,因为mysql_* 函数现在已弃用...

编辑:还可以考虑使用radio 而不是checkbox - 假设用户应该只选择一个答案。如果您想让用户选择一个以上(或所有三个答案),那么checkbox 就可以了。

【讨论】:

  • 这是一个比我写的更好的解决方案,删除我的答案,并支持你的
【解决方案2】:

如果您需要可用的变量,您可以在随机播放的同时进行提取

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

shuffle($answers);
extract($answers);

// 访问变量

echo $opt1;
echo $opt2;
echo $opt3;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2015-03-10
    • 2015-06-04
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    相关资源
    最近更新 更多