什么时候php foreach索引增量?

时间:2014-09-16 01:21:28

标签: php foreach kohana

$databaseObjects = Database::instance()->query('SELECT * FROM table');
foreach ($databaseObjects as $key => $value) {
    echo "(key: $key, value: $value)";
    if ($key + 1 < count($objects))
        $nextObject = $objects[$key + 1];
}

给定Kohana的数据库对象数组,上面的循环将跳过所有奇数键。原因是因为访问$ objects [$ key + 1]会增加$ key。我不明白这背后的原因。从什么时候开始,数组访问操作符递增密钥?

3 个答案:

答案 0 :(得分:0)

$objects[$key+1]不会增加$key

您的代码很奇怪 - 您设置$nextObject但从不使用它。

请记住:数组键并不总是有序,例如0,1,2,3,4,5!

例如,这个数组:

<?php
$arr = array(
    0 => "Zero",
    2 => "Two",
    5 => "Five"
);
?>

将在您的脚本中打印出以下内容:

(key: 0, value: Zero)(key: 2, value: Two)(key: 5, value: Five)

...和这个数组:

<?php
$arr = array(
    5 => "Five"
    2 => "Two",
    0 => "Zero",
);
?>

将在您的脚本中打印出以下内容:

(key: 5, value: Five)(key: 2, value: Two)(key: 0, value: Zero)

答案 1 :(得分:0)

$objects[$key + 1];不会增加$key$key + 1未分配给$key。此外,即使$ key被分配了$ key + 1,这也不会影响下一次迭代中的$ key变量,因为$ key是foreach的本地变量,并且每次foreach迭代时都会初始化数组中的下一个元素。

但是,由于这是foreach循环,$key只是index(假设此数组不是关联数组)。因此,每当循环迭代元素时,$key将从零开始递增。

答案 2 :(得分:0)

看来我遗漏了我在Kohana数据库对象上迭代的重要细节。它们必须以一种方式覆盖foreach迭代器,这样当我在foreach循环中执行数组访问时,

$nextObject = $objects[$key + 1];

它将影响下一次迭代的$ key。