2014-09-16 3 views
0
$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]; 
} 

Учитывая массив объектов базы данных из Коханы, вышеуказанный цикл пропустит все нечетные ключи. Причина этого в том, что доступ к $ objects [$ key + 1] увеличивает $ key. Я не понимаю причины этого. С каких пор оператор доступа к массиву увеличил ключ?, когда php foreach увеличивает индекс?

+0

Это недопустимый код: вам не хватает ')' на строке 'if'. Кроме того, ['$ key + 1' не увеличивает' $ key'] (http://codepad.org/jPWwm4zq). Если вы попытались упростить код, вы удалили всю область проблем. –

ответ

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. Они должны быть переписаны в Еогеасп итератор в моде, так что когда я выполняю доступ массива внутри цикла Еогеасп,

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

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

+0

Вы должны разместить это как комментарий по своему вопросу, а не как ответ ... –

Смежные вопросы