【问题标题】:Why this strange infinite loop occurs为什么会发生这种奇怪的无限循环
【发布时间】:2014-07-27 06:24:21
【问题描述】:

有谁知道为什么下面的代码:

foreach ($_POST as $new => $new_val) {
    foreach ($info as $old => $old_val) {
        if ($new == $old || $new_val !== $old_val) {
            $change_log[$old] = array("old" => $old_val, "new" => $new_val,);
            var_dump($change_log);
        }
    }
}

挂起操作系统(就像进入无限循环一样)。
但是在“if”条件下,运算符 ||改为 && 如下:

if ($new == $old && $new_val !== $old_val)

一切正常。
|| 有什么问题在这段代码中?

【问题讨论】:

  • 你能发布$_POST$info的例子吗?
  • 它不是无限的,但可能只是很长。 $_POST$info 中有多少项?
  • 你也可以发布 $change_log 的 var_dump 吗?试试看程序运行时cpu的使用情况?
  • 在帖子和信息中少于 50 项。因此它们并不大,我正在等待系统“解挂”大约 10 分钟。
  • 您可以将第二个循环替换为:array_key_exist 检查:array_key_exist($new, $info)

标签: php foreach infinite-loop


【解决方案1】:

var_dump($change_log); 需要很长时间。如果所有值都更改了,则该行执行 50 * 50 次,并且每次(对于每个不匹配)$change_log 的长度都会增加。

所以在最坏的情况下,它会变成 2500 次打印 $change_log 长度可能是 2500。

将这一行 var_dump($change_log); 放在外循环之后,看看会发生什么。

【讨论】:

  • 您可以在回答中提到使用 or (||) 运算符没有任何意义 - if 子句中的语句几乎任何输入都为真
  • @SamiKorhonen:我看到你的评论已经解决了这个问题:-)
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 2011-12-08
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2015-07-18
  • 1970-01-01
相关资源
最近更新 更多