【问题标题】:Why the following PHP code creates an infinite loop?为什么下面的 PHP 代码会创建一个无限循环?
【发布时间】:2011-04-19 11:24:56
【问题描述】:
$arr = array('a' => 1, 'b' => 2, 'c' => 3);
reset($arr);
while (list($k, $v) = each($arr)) {
    print "$k => $v\n";
    $h[] = $arr;
}

【问题讨论】:

    标签: php infinite-loop


    【解决方案1】:

    使用foreach($arr as $k => $v) 而不是reset($arr); while(...)

    它失败的原因是$h[] = $arr;如果内部数组指针在末尾,则重置它,因此循环从头开始。

    【讨论】:

    • 他正在循环数组$arr$h 是一个不同的数组......或者我错过了什么明显的东西?
    • 他使用$arr 作为右值。并且复制数组显然会重置其指针。又一个为什么 PHP 很棒的例子!
    • while (list($k, $v) = each($arr)) 是 PHP3 遍历数组的方法。所以这很好 - 但是一旦你修改数组(包括它的内部指针),它就会停止这样做。 foreach() 不会遇到这个问题,因为它总是对数组的副本进行操作。
    • 好吧,好像是这样。我想说这不是一个怪癖,而是一个明显的错误......:-/
    【解决方案2】:

    盗贼大师是对的。通过$arr 的分配,您在最后一个元素处重置内部指针。使用 foreach() 时,您将使用原始数组的副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2021-05-14
      • 2018-02-22
      • 1970-01-01
      • 2020-07-12
      • 2018-05-03
      相关资源
      最近更新 更多