У меня была похожая проблема, и я был рад найти этот пост. Однако предоставленные решения работают только для 2 уровней и не работают для многомерного массива с любым количеством уровней. Мне нужно было решение, которое могло бы работать с массивом любого размера и найти первые ключи каждого уровня.
После небольшой работы я нашел решение, которое может пригодиться кому-то еще, и поэтому я включил свое решение в этот пост.
Вот пример стартового массива:
$myArray = array(
'referrer' => array(
'week' => array(
'201901' => array(
'Internal' => array(
'page' => array(
'number' => 201,
'visits' => 5
)
),
'External' => array(
'page' => array(
'number' => 121,
'visits' => 1
)
),
),
'201902' => array(
'Social' => array(
'page' => array(
'number' => 921,
'visits' => 100
)
),
'External' => array(
'page' => array(
'number' => 88,
'visits' => 4
)
),
)
)
)
);
Поскольку эта функция должна отображать все первые клавиши независимо от размера массива, это предполагает рекурсивную функцию, и моя функция выглядит так:
function getFirstKeys($arr){
$keys = '';
reset($arr);
$key = key($arr);
$arr1 = $arr[$key];
if (is_array($arr1)){
$keys .= $key . '|'. getFirstKeys($arr1);
} else {
$keys = $key;
}
return $keys;
}
Когда функция вызывается с помощью кода:
$xx = getFirstKeys($myArray);
echo '<h4>Get First Keys</h4>';
echo '<li>The keys are: '.$xx.'</li>';
вывод:
Получить первые ключи
- Ключи: реферер | неделя | 201901 | внутренний | страница | номер
Надеюсь, это сэкономит кому-то немного времени, если он столкнется с подобной проблемой.