2013-07-25 1 views
1

У меня есть 1 к 1 линейное дерево, где языки => types => products => etc; с языками, имеющими много типов и типов, имеющих много продуктов и т. д.Линейное представление дерева массивов

Я написал рекурсивную функцию, чтобы вернуть массив в следующем стиле:

Array 
(
    [0] => Array 
    (
     [id] => 166 
     [name] => product1 
     [type] => product 
     [depth] => 2 
     [parent] => Array 
      (
       [0] => Array 
        (
         [id] => 165 
         [name] => default 
         [type] => type 
         [depth] => 1 
         [parent] => Array 
          (
           [0] => Array 
            (
             [id] => 1 
             [name] => en 
             [type] => language 
             [depth] => 0 
             [parent] => false 

            ) 

          ) 

        ) 

      ) 

    ) 

) 

То, что я хочу, это рекурсивный метод, который будет проходить это дерево и предоставить массив, такие как

[0] => array('id' => 1, 'name' => 'en'), 
[1] => array('id' => 165, 'name' => 'default'), 
[2] => array('id' => 166, 'name' => 'product1') 

С 0,1,2, равным этим элементам depth, поэтому я могу создавать панировочные сундуки данных.

спасибо.

ответ

1

Ключ здесь заключается в том, чтобы сделать функцию печати, которую вы можете вызвать рекурсивно. Я хотел бы предложить что-то вроде этого

function print_recursive($array, $depth = 0) { 
    //Code to print your stuff 

    //Calls the print function on the parent if it's an array 
    if(is_array($array['parent'])) { 
     print_recursive($array['parent'], $depth+1); 
    } 
} 

Параметр глубина составляет 0 по умолчанию, но мы увеличиваем его на 1 при вызове print_recursive на $ массиве [ «родителя»]. Таким образом, каждый раз, когда вы становитесь глубже в массиве, он будет увеличиваться.

+0

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