когда php увеличивает индекс foreach?

$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

Решение

$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)
0

Другие решения

$objects[$key + 1]; не увеличивает $key, $key + 1 не присваивается $key, Более того, даже если $ key был назначен $ key + 1, это не повлияет на переменную $ key в следующей итерации, поскольку $ key является локальным для foreach и инициализируется каждый раз, когда foreach итерации по следующему элементу в массиве.

Тем не менее, так как это foreach петля, $key ничего кроме index (при условии, что этот массив не является ассоциативным). Следовательно $key будет увеличиваться, начиная с нуля, каждый раз, когда цикл повторяется в элементе.

0

Похоже, я упустил важную деталь, которую я повторяю над объектами базы данных Kohana. Они должны были перезаписать итератор foreach таким образом, чтобы при выполнении доступа к массиву внутри цикла foreach,

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

это повлияет на ключ $ на следующей итерации.

0
По вопросам рекламы [email protected]