$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。我不明白这背后的原因。从什么时候开始,数组访问操作符递增密钥?
答案 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。