$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. Я не понимаю причину этого. С каких пор оператор доступа к массиву увеличивает ключ?
$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)
$objects[$key + 1];
не увеличивает $key
, $key + 1
не присваивается $key
, Более того, даже если $ key был назначен $ key + 1, это не повлияет на переменную $ key в следующей итерации, поскольку $ key является локальным для foreach
и инициализируется каждый раз, когда foreach
итерации по следующему элементу в массиве.
Тем не менее, так как это foreach
петля, $key
ничего кроме index
(при условии, что этот массив не является ассоциативным). Следовательно $key
будет увеличиваться, начиная с нуля, каждый раз, когда цикл повторяется в элементе.
Похоже, я упустил важную деталь, которую я повторяю над объектами базы данных Kohana. Они должны были перезаписать итератор foreach таким образом, чтобы при выполнении доступа к массиву внутри цикла foreach,
$nextObject = $objects[$key + 1];
это повлияет на ключ $ на следующей итерации.