Получить из многомерного массива все ключи. PHP
Пример многомерного массива:
array(1) {
["sitename.ru"]=>
array(1) {
[49396665029]=>
array(1) {
[29576565627]=>
array(1) {
[16776565626]=>
array(1) {
["http://url.ru"]=>
array(1) {
["ANSWERED"]=>
array(1) {
["static"]=>
array(1) {
["calls"]=>
int(1)
}
}
}
}
}
}
}
}
Ответы (3 шт):
Автор решения: Mamba
→ Ссылка
Имеете ввиду так?
$in = array('key1'=>array('key2' => array('key3' => array('key4'=>1, 'key5' => 2))));
function get_keys_recursive($in) {
$keys = array();
$buff = array_keys($in);
$keys = array_merge($keys, $buff);
for($i = 0; $i < count($keys); $i++) {
$key = $keys[$i];
if(isset($in[$key]) && is_array($in[$key])) {
$buff = get_keys_recursive($in[$key]);
$keys = array_merge($keys, $buff);
}
}
return $keys;
}
var_dump(get_keys_recursive($in));
array(5) {
[0]=>
string(4) "key1"
[1]=>
string(4) "key2"
[2]=>
string(4) "key3"
[3]=>
string(4) "key4"
[4]=>
string(4) "key5"
}
Но зачем вам это не пойму, просто обращайтесь к необходимому элементу
$data["sitename.ru"][49396665029][29576565627]
Автор решения: девочкасглазамиребёнка
→ Ссылка
Имхо, в предыдущем ответе все усложнено, можно же попроще
function get_array_keys_multi(array $array): array
{
$keys = [];
foreach ($array as $key => $value)
{
$keys[] = $key;
if (is_array($array[$key])) {
$keys = array_merge($keys, get_array_keys_multi($array[$key]));
}
}
return $keys;
}
Ну, или..
$result = [];
array_walk_recursive($data, function($v,$k) use(&$result){
$result[] = $k;
});
print_r($result);
Автор решения: Walther
→ Ссылка
Решение задачи:
while(is_array($arr)){
$arrayKeys[] = key($arr);
$arr = current($arr);
}