2017-05-11 87 views
0

我有这样的多维数组。它在var_dump()格式中。递归获取多维数组的键

array(1) { 
    [4]=> 
    array(1) { 
    [2]=> 
    array(1) { 
     [5]=> 
     array(1) { 
     [1]=> 
     array(1) { 
      [3]=> 
      array(1) { 
      [6]=> 
      array(0) { 
      } 
      } 
     } 
     } 
    } 
    } 
} 

又名$多阵列,我想从中得到所有的键和设置他们得到阵列这样。

[0=>4, 1=>2, 2=>5, 3=>1, 4=>3, 5=>6] aka **$keysArray**. 

试过这样。

foreach(new \RecursiveIteratorIterator(
    new \RecursiveArrayIterator(**$multiArray**), 
    \RecursiveIteratorIterator::SELF_FIRST) 
    as $key => $value) { 
     **$keysArray[]** = $key; 
    } 

也这样。

function array_keys_multi(array $array) { 
     $keys = []; 

     foreach ($array as $key => $value) { 
      $keys[] = $key; 
      if (is_array($value)) { 
       $keys = array_merge($keys, $this->array_keys_multi($value)); 
      } 
     } 

     return $keys; 
    } 

但它们都返回不正确的数据。我如何获得所有密钥?

+0

应导致是:'[4 => 2,2 => 5,5 => 1,1,1 => 3,3 => 6]'? –

+0

@E_p,不。结果需要像这样。 [0 => 4,1 => 2,2 => 5,3 => 1,4 => 3,5 => 6] – user3266517

+0

“RecursiveIteratorIterator”方法有什么问题? – sevavietl

回答

1

这似乎为我工作:

function array_keys_recursive(array $arr) { 
    foreach($arr as $key => $value) { 
     $return[] = $key; 
     if(is_array($value)) $return = array_merge($return, array_keys_recursive($value)); 
    } 
    return $return; 
} 

基本上等同于你的,也可以工作,顺便说一句。

0

我用一个递归函数:

<?php 

$multiArray = 
array(4 => 
    array (
    2 => 
    array (
     5 => 
     array (
     1 => 
     array (
      3 => 
      array (
      6 => 
      array (
      ) 
     ) 
     ) 
    ) 
    ) 
) 
); 


$keysArray = array(); 
$depth = 0; 

function newArray($array, &$keysArray) { 

    foreach ($array as $key => $value) { 
     $depth++; 
     array_push($keysArray, $key); 
     if(is_array($value) && $depth < 10) { newArray($value, $keysArray); } 

    } 

} 

newArray($multiArray, $keysArray); 
print_r($keysArray); // Your expected result 
// $keysArray = Array ([0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 3 [5] => 6) 

?> 

我使用的变量$深度,以防止要循环疯