假设我有一个非常复杂的多维数组,如下所示:
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)?
谢谢
答案 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);
}
}
}
答案 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;
}