我有一个表单,用户可以在7个不同的字段中输入数字然后使用
shuffle($_POST);
混合数字,然后根据他们最初输入的数字显示它们,所以输出如下:
1 1
2 4
3 6
4 2
5 7
6 3
7 5
以下是我正在使用的代码。
<?php
error_reporting(0);
if ($_SERVER['REQUEST_METHOD']== "POST") {
$array = implode("",$_POST);
shuffle($_POST);
}
?>
<div class="box"><?php echo $array[0]; ?> <?php echo $_POST[0]; ?></div><br>
<div class="box"><?php echo $array[1]; ?> <?php echo $_POST[1]; ?></div><br>
<div class="box"><?php echo $array[2]; ?> <?php echo $_POST[2]; ?></div><br>
<div class="box"><?php echo $array[3]; ?> <?php echo $_POST[3]; ?></div><br>
<div class="box"><?php echo $array[4]; ?> <?php echo $_POST[4]; ?></div><br>
<div class="box"><?php echo $array[5]; ?> <?php echo $_POST[5]; ?></div><br>
<div class="box"><?php echo $array[6]; ?> <?php echo $_POST[6]; ?></div><br>
如何相互检查两个数组值以确保它们不匹配。如果他们匹配,那么我想再次使用shuffle(),直到其中一个匹配。我可能会使用if else语句再次运行代码,直到数字不匹配但不确定如何进行。
答案 0 :(得分:3)
在while循环中检查array_intersect_assoc($array,$_POST);
,直到它返回null数组,随机播放!
使用array_intersect_assoc()
:
$array = $_POST;
do {
shuffle($_POST);
} while ((count(array_intersect_assoc($array, $_POST))) !=0);
答案 1 :(得分:1)
您可以编写一个辅助函数来测试数组是否匹配,然后随机播放,直到没有匹配为止。
function has_same_matches($arr1, $arr2) {
for($i=0, $sz = count($arr1); $i < $sz; ++$i) {
if ($arr1[$i] == $arr2[$i]) return true;
}
return false;
}
$array = [1,2,3,4,5,6,7];
$shuffled = $array;
while(has_same_matches($array, $shuffled)) {
shuffle($shuffled);
}
答案 2 :(得分:1)
我不确定你为什么要直接使用$ _POST,但无论如何我觉得这个灵魂应该适合你。 另请注意,shuffle()不保留数组键。
if ($_SERVER['REQUEST_METHOD']== "POST") {
$init_array = $_POST;
$array = implode("",$_POST); //user input
shuffle($_POST);
$after_shuffle = $_POST;
while($init_array == $after_shuffle){
shuffle($_POST);
}
$final_array = $_POST; //array with unmatched values
}