【问题标题】:Get keys from multidimensional array recursively递归地从多维数组中获取键
【发布时间】:2017-10-11 03:43:28
【问题描述】:

我有这样的多维数组。它采用 var_dump() 格式。

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

又名 $multiArray,我想从中获取所有键并将它们设置为像这样获取数组。

[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;
    }

但它们都返回了不正确的数据。我怎样才能得到所有的钥匙?

【问题讨论】:

  • 结果应该是:[4 => 2, 2 => 5, 5 => 1, 1 => 3, 3 => 6]?
  • @E_p ,不。结果需要是这样的。 [0=>4, 1=>2, 2=>5, 3=>1, 4=>3, 5=>6]
  • RecursiveIteratorIterator 方法有什么问题?

标签: php arrays multidimensional-array get key


【解决方案1】:

我使用了递归函数:

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

?>

我使用变量 $depth 来防止循环疯狂

【讨论】:

    【解决方案2】:

    这似乎对我有用:

    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;
    }
    

    顺便说一句,与你的基本相同,这也有效。

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 2021-10-29
      • 2021-07-19
      • 2020-12-23
      • 2017-12-28
      • 2017-11-28
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多