使用PHP吸管

问题描述 投票:0回答:1

上下文

最近,我一直在努力使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。我想要它,以便每个人都可以吸引尚未被吸引的人。

php arrays for-loop post random
1个回答
0
投票

为了进行最小的更改,您可以替换行

${"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之间绘制参与者组中当前位置以外的位置。然后,通过移动位于该参与者之前的任何位置,为该被排除的参与者插入一个“空洞”,以便将该位置用作索引。

© www.soinside.com 2019 - 2024. All rights reserved.