each():数组指针不能正常工作

时间:2013-02-05 21:13:16

标签: php

请考虑此代码

var_export ($dates);
while (list($key, $date) = each($dates))
{
    echo("current = ".current($dates));
    echo("key = " . key($dates));
}

结果是

Array
(
    [1359928800] => 1359928800
)

current =
key = 

我预计应该返回1359928800,我错了?

3 个答案:

答案 0 :(得分:7)

使用数组时,有一个不同的古老构造用于处理迭代:foreach(documentation here)。

我建议以这种方式迭代数组。它更容易阅读,几乎不可能出错。此外,您不必担心如警告here中所述,可能会以无限循环结束。

<?php
var_export($dates);
foreach($dates as $key => $value) {
    echo("current = ".$value);
    echo("key = ".$key);
}

答案 1 :(得分:0)

为什么不使用$key$date

while (list($key, $date) = each($dates))
{
    echo("current = ".$date); // 1359928800
    echo("key = " . $key); // 1359928800
}

答案 2 :(得分:0)

原因each已经推进指针。

documentation州:

  

从数组中返回当前键和值对并使数组光标前进。

因此在循环内current引用 next 元素。在你的情况下,没有下一个元素,所以它是false。您应该使用$key$date或更好,使用foreach,就像已经建议的那样。