我要从Google Maps API返回一个嵌套数组。我想做的是在数组中找到某种类型。我正在使用json_decode
将结果从JSON转换为PHP。
这是返回的响应:
Array
(
[results] => Array
(
[0] => Array
(
[address_components] => Array
(
[0] => Array
(
[long_name] => 78210
[short_name] => 78210
[types] => Array
(
[0] => postal_code
)
)
[1] => Array
(
[long_name] => San Antonio
[short_name] => San Antonio
[types] => Array
(
[0] => locality
[1] => political
)
)
[2] => Array
(
[long_name] => Bexar County
[short_name] => Bexar County
[types] => Array
(
[0] => administrative_area_level_2
[1] => political
)
)
[3] => Array
(
[long_name] => Texas
[short_name] => TX
[types] => Array
(
[0] => administrative_area_level_1
[1] => political
)
)
[4] => Array
(
[long_name] => United States
[short_name] => US
[types] => Array
(
[0] => country
[1] => political
)
)
)
[formatted_address] => San Antonio, TX 78210, USA
[geometry] => Array
(
[bounds] => Array
(
[northeast] => Array
(
[lat] => 29.418426
[lng] => -98.422923
)
[southwest] => Array
(
[lat] => 29.374093
[lng] => -98.499778
)
)
[location] => Array
(
[lat] => 29.3979578
[lng] => -98.4677851
)
[location_type] => APPROXIMATE
[viewport] => Array
(
[northeast] => Array
(
[lat] => 29.418426
[lng] => -98.422923
)
[southwest] => Array
(
[lat] => 29.374093
[lng] => -98.499778
)
)
)
[place_id] => ChIJy9U5Yzj2XIYRRhV9xWIghyU
[types] => Array
(
[0] => postal_code
)
)
)
[status] => OK
)
我需要做的是找到某种类型并返回long_name
或short_name
。我希望这是有道理的。
所以基本上,如果类型=政治的,那么返回整个数组,这样我就可以访问long_name和short_name。
我尝试使用array_search,但没有得到任何结果。
任何帮助,我们将不胜感激!
答案 0 :(得分:1)
这将返回找到的第一个数组:
foreach($array['results'][0]['address_components'] as $v) {
if(is_array($v['types']) && in_array('political', $v['types'])) {
$result = $v;
break;
}
}
如果要多个,请使用$result[] = $v;
并删除break
。
答案 1 :(得分:0)
您可以使用array_map
函数
$arr = array(
0 => array(
'long_name' => 'Bexar County',
'short_name' => 'Bexar County',
'types' => array(
0 => 'administrative_area_level_2',
1 => 'political'
)
)
);
$findType = 'political';
$result = array_map(function($v) use ($findType){
if(in_array($findType, $v['types']))
return $v;
}, $arr);
结果:
Array
(
[0] => Array
(
[long_name] => Bexar County
[short_name] => Bexar County
[types] => Array
(
[0] => administrative_area_level_2
[1] => political
)
)
)