function nonrecgen($min, $max, $amount) {
for($i=0;$i<$amount;$i++) {
$NrArray[$i] = rand($min,$max);
echo $NrArray[$i];
do {
for($j=0;$j<=$i;$j++) {
if ($NrArray[$j] == $NrArray[$i]) {
$NrArray[$i] = rand($min,$max); }
}
$Reccuring = false;
if ($i > 0) {
for($k=0;$k<=$i;$k++) {
if ($NrArray[$k] == $NrArray[$i]) {
$Reccuring = true; }
}
}
}
while ($Reccuring = true);
}
Return $NrArray;
}
$Test = nonrecgen(0,1,2);
print_r($Test);
我想研究如何生成一个非重复数字的数组,虽然这当然不是我认为最有效的方法,但我似乎无法弄清楚为什么它在第一次迭代时无休止地循环。我一遍又一遍地尝试逻辑分析,但必须有一些我不知道的东西。
答案 0 :(得分:29)
do {
...
} while ($Reccuring = true);
因为你的while语句将$ Recurring设置为true,而不是评估它。
尝试:
do {
...
} while ($Reccuring === true);
答案 1 :(得分:6)
您目前正在分配值而不是检查(总是如此)。
将其更改为:while ($Reccuring == true);
答案 2 :(得分:6)
除了=
到==
之外,您还在错误的位置重置了$Recurring
:
<?
function nonrecgen($min, $max, $amount)
{
for($i=0;$i<$amount;$i++)
{
$NrArray[$i] = rand($min,$max);
do
{
for($j=0;$j<=$i;$j++)
{
if ($NrArray[$j] == $NrArray[$i])
{
$NrArray[$i] = rand($min,$max);
}
}
if ($i > 0)
{
for($k=0;$k<=$i;$k++)
{
if ($NrArray[$k] == $NrArray[$i])
{
$Reccuring = true;
}
}
}
$Reccuring = false;
}
while ($Reccuring == true);
}
return $NrArray;
}
$Test = nonrecgen(0,2,5);
echo "<pre>";
print_r($Test);
?>