【问题标题】:php simple rand() look up taking long / crashing browser?php simple rand() 查找耗时长/崩溃的浏览器?
【发布时间】:2021-05-14 17:47:45
【问题描述】:

我正在运行这段代码:

$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 秒的最大执行时间

它要么运行得非常快,要么崩溃。有人可以帮我理解这是为什么吗?

谢谢

【问题讨论】:

  • 您的循环在$n1 ==$n2 时终止,但您永远不会更改其中任何一个。您的脚本将立即终止或永远运行
  • 我在for语句中改了...
  • 我猜它一定是缓存的东西......
  • 否 - 再次查看您发布的代码。您在前两行设置了$n1$n2 的值。您不会在 for 语句或其他任何地方更改它们。
  • 啊。你说得对。但是代码在这里工作。只是将其更改为英文以在此处发布。对此感到抱歉。这是 $n2 oc。

标签: php random browser fatal-error


【解决方案1】:

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

如果$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>";

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

【讨论】:

    【解决方案2】:

    不确定这里是否有可接受的答案,但我的建议是添加以下几行。我建议使用 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>';
    

    【讨论】:

    • 感谢您的反对。为了尽可能对其他人有所帮助,请分享我的帖子被否决的原因。也许我可以调整它以提供更多帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多