Php 如何在这段代码中洗牌三个变量?
我有一个小问题,我试图做一个在线测试,但我需要洗牌answare所以 1是好的answare,2,3是坏的,但是所有的时间都是a=1b=2c=3,我想要一些随机的东西,比如a=2b=3C=1,我怎么能做到呢 代码如下: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
$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是魔鬼设计的属性!这是一个比我写的更好的解决方案,删除我的答案,然后对你的答案进行投票