2015-01-26 57 views
0

我有一個多維數組是這樣的:如何使用PHP爲遞歸函數返回數組?

<pre>Array 
(
    [0] => Array 
     (
      [id] => 52a83521-0914-4264-8fd9-07d9c601692a 
      [role_id] => 2 
      [children] => Array 
       (
        [0] => Array 
         (
          [id] => 54c1f5e4-b52c-4e17-b1bf-1f4616091b4e 
          [role_id] => 8 
          [children] => Array 
           (
            [0] => Array 
             (
              [id] => 54c20aba-201c-40ce-b3df-22d516091b4e 
              [role_id] => 9 
             ) 

            [1] => Array 
             (
              [id] => 54c20f4b-6e44-40ec-ae22-223a16091b4e 
              [role_id] => 9 
             ) 

           ) 

         ) 

        [1] => Array 
         (
          [id] => 54c1f8bb-ebac-466b-a83f-13a416091b4e 
          [role_id] => 8 
         ) 

       ) 

     ) 

) 
</pre> 

我需要填充此數組中的所有ROLE_ID秩序。我試着用遞歸函數是這樣的:

<?php 
public function tree_check($tree){ 
    $tree_keys = $this->_recursion($tree); 
    print_r($tree_keys); 
} 
public function _recursion($tree){ 
     foreach ($tree as $n => $v) 
     { 
      if(isset($v['role_id'])){ 
       $key_arr[] = $v['role_id']; 
      } 
      if (is_array($v)) 
       $this->_recursion($v); 

     } 
     return $key_arr; 
    } 

我期待下面的輸出中:

<pre> 
Array(
[0]=>2, 
[1]=>8, 
[2]=>9, 
[3]=>9, 
[4]=>8 
) 
</pre> 

在這裏,我無法達到我的預期的輸出。數組的級別可能會動態變化,這就是爲什麼我使用遞歸函數完成它。

我應該如何從遞歸函數返回數組?

因爲我不知道數組的深度是多少,我怎麼才能找到數組的最後一個鍵值對呢?

+0

wat是電流輸出嗎? – Umair 2015-01-26 18:30:48

回答

4

您可以使用RecursiveIteratorIterator經歷的元素:

function listRolesRecursive($myArray) { 
    $res = array(); 
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($myArray), RecursiveIteratorIterator::SELF_FIRST); 
    foreach ($iterator as $k => $v) { 
     if($k === "role_id") { 
      $res[] = $v; 
     } 
    } 
    return $res; 
} 

$res = listRolesRecursive($arr); 
var_dump($res); 

它應該做的伎倆。

+0

謝謝..它的工作! – 2015-01-27 06:40:31