Obter chaves de multidimensional array de forma recursiva

Eu tenho uma multidimensional array como essa. Está na formatação var_dump ().

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

aka $ multiArray e eu quero obter todas as chaves dele e configurá-los para obter uma matriz como essa.

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

Tentei assim.

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

também isso.

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

mas ambos retornam dados incorretos. Como posso obter todas as chaves?

Isso parece funcionar para mim:

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

Basicamente idêntico ao seu, que também funciona, a propósito.

Usei uma function recursiva:

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

Eu usei a variável $ depth para evitar que o loop fosse louco