我有像这样的多维数组。它是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;
}
但他们都返回不正确的数据。我怎样才能获得所有钥匙?
答案 0 :(得分: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 )
?>
我使用变量$ depth来防止循环疯狂