Получить из многомерного массива все ключи. 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);
}
→ Ссылка