2016-08-15 2 views
1

Я недавно возникли некоторые проблемы с печатью моего Mongoid из массива после выполнения array_filter на массиве:PHP не печатает Mongoid из массива после фильтра массива

$array = array_filter($array); 
    $array = array_slice($array, 0, 3, true); 

Это обыкновение быть тонкой и работать без array_filter, теперь массив содержит:

Array ([3] => MongoId Object ([$id] => 57b0facace2350981c000029) [4] => MongoId Object ([$id] => 57b0fafcce2350981c00002b)) 

Однако распечатывания идентификатор Теперь выходит из строя или нет цикл:

$length = count($array); 
    for ($i = 0; $i < $length; $i++) { 
    $id = $array[$i]->{'$id'}; 
    echo $id; 
    } 

Опять же все это использовалось для работы, но после фильтрации для удаления нулевых элементов, однако теперь кажется, что он не перебирает правильный массив, но это может быть другой проблемой. Любая помощь в решении этого вопроса будет оценена по достоинству.

+0

Посмотрите на ключи вашего размещенного массива, а затем посмотрите на цикл for и что вы там делаете: P – Rizier123

+0

вы имеете в виду, потому что мои ключи начинаются с 3 после фильтрации? поэтому я должен найти способ перебрать его для каждого элемента, а не использовать длину массива? – D3181

+1

Точно. И поскольку вы сохраняете ключи в 'array_slice()', они все равно будут начинаться с 3 :) Таким образом, вы можете использовать цикл foreach или получить ключи из массива с помощью 'array_keys()', а затем получить доступ к ключам с переменной счетчика из цикл for и ключи для индекса массива. – Rizier123

ответ

1

Причиной ошибки было сохранение ключей в массиве из-за array_slice после использования array_filter для удаления нулевых элементов. Это означало, используя длину массива перебрать он не работает, и вместо того, чтобы цикл Еогеасп требовалось для того, чтобы было бы перебрать все элементы в массиве:

foreach ($array as &$value) 
{ 
} 

Спасибо @ Rizier123

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