上下文
最近,我一直在努力使php成为吸管。如果您不知道什么是吸管,那么基本上就是有人获得别人的名字,而有人获得别人的名字等。为了更清楚一点,代码的随机生成输出应如下所示:
((有4个人的示例)
Person A drew person B
Person B drew person D
Person C drew person A
Person D drew Person B
ATTEMPT 1
为了实现这一点,我尝试使用以下代码:
$name = $_POST["names"]; // <-- name-array
$participants = $_POST["participants"]; // <-- stores the amount of participants
$arrX = $name;
for($i = 1; $i <= $participants[0]; $i++) {
echo $name[$i-1];
echo " drew ";
${"randIndex$i"} = array_rand($arrX, 1);
echo $arrX[${"randIndex$i"}];
echo "<br><br>";
}
问题1
虽然这确实提供了输出,但并不令人满意。一个人可以自己画画,这是不允许的。我希望参与者画一个自己以外的人。
我最好的猜测是,为了解决这个问题,我必须使用if语句。我只是不知道该怎么做才最合适。
编辑:问题2
相同的输出还允许两个人绘制相同的人。即人A和B(可能还有更多)吸引人C。我想要它,以便每个人都可以吸引尚未被吸引的人。
为了进行最小的更改,您可以替换行
${"randIndex$i"} = array_rand($arrX, 1);
作者
${"randIndex$i"} = rand(1, $participants[0] - 1);
if (${"randIndex$i"} < $i)
--${"randIndex$i"};
[不是在N个参与者中绘制名称,而是rand
在1个参与者和1个N-1之间绘制参与者组中当前位置以外的位置。然后,通过移动位于该参与者之前的任何位置,为该被排除的参与者插入一个“空洞”,以便将该位置用作索引。