2014-01-14 2 views
0

У меня есть этот маленький фрагмент, чтобы получить идентификаторы из многомерного массива.PHP рекурсия, где поставить return

<?php 

$array = array(
    array(
     'id' => 1, 
     'children' => array(
      array(
       'id' => 12, 
       'children' => array() 
      ), 
      array(
       'id' => 13, 
       'children' => array(
        array(
         'id' => 112, 
         'children' => array() 
        ) 
       ) 
      ) 
     ) 
    ), 
    array(
     'id' => 140, 
     'children' => array(
      array(
       'id' => 144, 
       'children' => array(
        array(
         'id' => 101, 
         'children' => array() 
        ) 
       ) 
      ) 
     ) 
    ), 
    array(
     'id' => 32, 
     'children' => array(
      array(
       'id' => 223, 
       'children' => array() 
      ) 
     ) 
    ), 
    array(
     'id' => 40, 
     'children' => array() 
    ) 
); 



function get_ids($array, $result) 
{ 
    foreach($array as $a) 
    { 
     $result[] = $a['id'] . "\n"; 

     if (count($a['children'])) 
     {   
      return get_ids($a['children'], $result); 
     } 
    } 

    return $result; 


} 

print_r(get_ids($array, array())); 

Этого код выводит первую иду массива так:

Array 
(
    [0] => 1 

    [1] => 12 

    [2] => 13 

    [3] => 112 

) 

Если я вместо $ результата [] положил эхо и удаляет возврат на возвращении get_ids грести он повторяет каждый идентификатор, как задуман, проблема в том, что я хотел бы иметь их в симпатичном массиве с идентификаторами.

Я думаю, что испортил заявления о возврате, но я понятия не имею.

+2

Вы можете сделать это по ссылке (использование '* & $ result' в качестве параметра), но это вряд ли нужно: использовать '$ result = array_merge ($ result, get_ids ($ a ['children']))' вместо первого 'return' в функции, и вы тоже будете в порядке. – Wrikken

ответ

3

Первое возвращение возвращает только идентификаторы ребенка; вы теряете идентификатор родителя. Вам нужны оба.

Итак, замените это:

return get_ids($a['children'], $result); 

С этим:

$result = array_merge($result, get_ids($a['children'])); 
Смежные вопросы