2015-09-01 1 views
0

Я пытаюсь перебрать все дочерние элементы parent-> children или parent-> children->, но по какой-то причине я, похоже, теряю данные из массива.Я, кажется, теряю данные из массива

Объяснение: Я получаю массив, который называется блоком. В этом блоке у меня есть дочерний массив. У меня может быть больше дочернего массива у детей. У этих детей есть индекс атрибутов, присвоенный некоторыми значениями. Я ищу эти ценности. Если индекс установлен, я помещаю его в массив с переменной $ pos, которая определяет положение дочернего элемента. В некоторых случаях этот foreach работает отлично, но в некоторых случаях, когда у меня есть случайный порядок дочерних элементов с индексами, он теряет значения индекса и возвращает только один элемент.

Кстати, весь массив блоков передается как родительский элемент функции.

Следующий мой код.

private function addIndexKey($parent) { 
    $myKeys = array(); 
    foreach ($parent->children as $child) { 
     $pos = $child->varGet('flow_pos'); 
     if (!isset($pos)) 
      $pos = $child->position; 
     if (isset($child->index)) 
      $myKeys["$pos"] = $child->index; 
     if (isset($child->children) && count($child->children)>0) { 
      $subkeys = $this->addIndexKey($child); 
      if (count($subkeys)>0) 
       $myKeys["$pos"] = $subkeys; 
     } 
    } 
    ksort($myKeys); 
    return $myKeys; 
} 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

+3

Можете ли вы добавить немного больше объяснений о том, какие данные вы теряете? В вашем массиве '$ myKeys' просто отсутствуют некоторые данные, которые, по вашему мнению, должны быть там? Пример ввода с ожидаемым + фактическим выходом поможет. –

+0

Иногда проблема может быть в размере этого массива, если массив имеет путь tooooo большой, вы потеряете последнюю часть массива, которая не подходит для него, это можно устранить, изменив размер памяти на php.ini – Germanaz0

+0

I не думаю, что проблема с памятью, поскольку она должна содержать только 8 индексов. – Shaonline

ответ

0

Я подозреваю, что он переопределяет массив $ myKeys, если он вызван в третьем условии. Мой вопрос сейчас в том, есть ли способ узнать, будет ли функция индекса вызвана в первый раз или нет.? Я хочу определить массив $ myKeys только один раз, когда вызывается в первый раз.

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