检索多维数组键而不使用无限嵌套的foreach

时间:2012-02-10 19:42:42

标签: php arrays multidimensional-array

假设我有一个非常复杂的多维数组,如下所示:

Array
(
        [A] => Array
            (
                [B] => Array
                    (
                        [C] => Array
                            (
                                [D] => Array
                                    (
                                        [E] => Array
                                            (
                                                [0] => Array
                                                    (
                                                        [id] =>
                                                        [firstname] =>
                                                        [lastname] => 
                                                    )

                                            )

                                    )

                            )

                    )

            )

    )

在这个数组中,键的数量可以根据情况而变化,例如,键可以只是A,B和C,或者只有A和B,甚至是A,B,C,D,E, F,G,H,......等是否有可能在没有20个嵌套的foreach循环的情况下收集这种数组的键(在这种情况下为内键A,B,C,D和E)?

谢谢

2 个答案:

答案 0 :(得分:2)

所以你想要递归枚举密钥?这是一个功能:

function enumerateKeys($array, &$keys) {
    if(!isset($keys)) {
        $keys = array();
    }

    foreach($array as $key => $value) {
        if(is_array($value)) {
            $keys[] = $key; /* Moved below if() to enumerate only array keys */
            enumerateKeys($value, $keys);
        }
    }
}

Here's a working demo.

答案 1 :(得分:2)

这是一个很好的递归解决方案:

function getKeys($yourArray) {
  $allKeys = array();
  if(is_array($yourArray)) {
    foreach($yourArray as $key => $value) {
       $allKeys = array_push($allKeys,$key);
       $allKeys = array_merge($allKeys,getKeys($value));
    }
  } else {
    //this line will also add the values if you want them
    //if you only want keys then just leave it out
    $allKeys = array_push($allKeys,$yourArray);
  }
  return $allKeys;
}