2014-01-14 38 views
0

我有這個小片段,以獲得多維數組的ID。PHP遞歸,在哪裏把回報

<?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())); 

該代碼輸出第一數組ids這樣的:

Array 
(
    [0] => 1 

    [1] => 12 

    [2] => 13 

    [3] => 112 

) 

如果我而不是$導致[]把回聲並移除返回get_ids返回排它呼應每id作爲意圖,問題是我想讓他們與ID很好的陣列。

我想我搞砸了返回的聲明,但我不知道。

+2

您可以參照這樣做(使用'*&$ result'作爲參數),但是這幾乎不需要:使用'$ result = array_merge($ result,get_ids($ a ['children']))'而不是函數中的第一個'return',你也會好起來的。 – Wrikken

回答

3

第一個返回值僅返回子對象的ID;你失去了父母的身份。你需要兩個。

所以,更換此:

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

有了這個:

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