php 简单的 rand() 查找需要很长时间/崩溃的浏览器?

php simple rand() look up taking long / crashing browser?

我是运行这个代码:

$n1 = rand(1,20);
$n2 = rand(1,20);
echo '<p>Looking for ' . $z1;
echo '<p>looking....<br><br>';
for ($i = 1; $n1 != $n2; $i ++) {
  $n2 = rand(1,10);
}

echo '<p>I tried ' . $i . ' times.</p>';

页面的首次加载通常非常快。然后突然:

致命错误:超过 120 秒的最长执行时间

要么运行速度超快,要么崩溃。谁能帮我理解这是为什么?

谢谢

不确定这里是否有可接受的答案,但我的建议是添加以下行。我建议使用 while 而不是 for:

$n1 = rand(1,20);
$n2 = rand(1,20);
echo '<p>Looking for ' . $z1;
echo '<p>looking....<br><br>';
$cnt=0;
while ($n1 != $n2) {
   $n2 = rand(1,10);
   $cnt++;
}
echo '<p>I tried ' . $cnt . ' times.</p>';

你犯了一个“逻辑”错误。

如果 $n1 = rand(1,20);$n1 设置为从 1120 的任何数字,那么您的循环中的条件将永远不会满足并导致“无限循环” ".

换句话说,大约一半的代码执行会导致无限循环,而另一半则不会。

$n2 = rand(1,10); 需要 $n2 = rand(1,20); 以便可以匹配所有可能的 $n1 值。

我可以推荐:

$n = rand(1, 20);
echo "<p>Looking for $n</p>";
$i = 0;
do {
    ++$i;
} while($n != rand(1, 20));

echo "<p>Tries: $i </p>";

最终,无论何时使用随机生成器来确定循环的中断条件,设置任意“最大迭代次数”值都是明智的。一旦达到,让你的脚本退出循环。