2015-10-23 6 views
0

Учитывая следующий массив:Получить путь к родительскому узлу (родитель/ребенок) массив

array(..) { 
    [1111]=> 
    &array(3) { 
    ["category_id"]=> 
    int(1111) 
    ["parent_id"]=> 
    int(0) 
    ["children"]=> 
    array(2) { 
     [2222]=> 
     &array(3) { 
     ["category_id"]=> 
     int(2222) 
     ["parent_id"]=> 
     int(1111) 
     ["children"]=> 
      array(2) { 
      [5555]=> 
       &array(1) { 
       ["category_id"]=> 
       int(5555) 
       ["parent_id"]=> 
       int(2222) 
       } 
     } 
     [3333]=> 
     &array(2) { 
     ["category_id"]=> 
     int(3333) 
     ["parent_id"]=> 
     int(1111) 
     } 
    } 

Предполагая, что глубина массива неизвестна, Как я могу определить путь к родительскому узлу?

Например, для category_id = 5555 Я должен получить следующий результат: 0, 1111,2222. Для category_id = 3333 было бы 0,1111

ответ

1

Один из подходов:

function findParent($node, $array, &$parents) { 
    if (array_key_exists($node, $array)) { 
     $parents[] = $array[$node]['parent_id']; 
    } 
    else { 
     foreach ($array as $item) { 
      if (array_key_exists('children', $item)) { 
       $parents[] = $item['parent_id']; 
       findParent($node, $item['children'], $parents); 
      } 
     } 
    } 
} 

findParent(5555, $A, $parents); 
Смежные вопросы