如何解决php simple rand() 查找需要很长时间/浏览器崩溃?
我正在运行此代码:
$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 = rand(1,20);
将 $n1
设置为从 11
到 20
的任何数字,那么循环中的条件将永远不会得到满足并导致“无限循环”。
换句话说,大约一半的代码执行会导致无限循环,而另一半不会。
$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>";
最终,无论何时使用随机生成器来确定循环的中断条件,设置任意“最大迭代次数”值都是明智之举。一旦达到,让您的脚本退出循环。
,不确定这里是否有可接受的答案,但我的建议是添加以下几行。我建议使用 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>';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。