Я хотел бы выполнить поиск в многомерном массиве и вернуть значение первого найденного ключа. Например, я работаю с некоторыми геоинструментами, и он возвращает этот массив. Как я могу рекурсивно пройти через этот массив и вернуть первое значение любого ключа с именем lat? Я попытался array_walk, но, похоже, просто возвращает истину или ложь. Я попытался array_filter, но я не думаю, что это для чего? Но я не знаю, сколько подмассивов будет в массиве, поэтому мне нужно, чтобы он просто просматривал каждый набор массивов, пока не найдет нужный мне ключ, вернет значение и все будет готово.
array(4) {
["bounds"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
["location_type"]=>
string(11) "APPROXIMATE"
["viewport"]=>
array(2) {
["northeast"]=>
array(2) {
["lat"]=>
float(37.8468559)
["lng"]=>
float(-121.891768)
}
["southwest"]=>
array(2) {
["lat"]=>
float(37.779857)
["lng"]=>
float(-122.027307)
}
}
}
Вот пример использования array_filter. Это работает, только если я повторяю значение, но я хочу вернуть значение, чтобы использовать его в другое время. Но когда я делаю возврат, он возвращает весь вложенный массив:
function getLat($k,$v)
{
if(is_array($k)){
foreach($k AS $key => $value)
{
if($key == 'lat')
{
echo $value;
}
}}
}
$test = array_filter($response,'getLat',ARRAY_FILTER_USE_BOTH);
Это эхо 37,8215929. Что я хочу, но хочу вернуть. Когда я изменяю echo для возврата, он возвращает это:
array(1) {
["location"]=>
array(2) {
["lat"]=>
float(37.8215929)
["lng"]=>
float(-121.9999606)
}
}