如何在嵌套数组中找到一个值,然后 return 该父项?
How can I find a value in a nested array and then return that parent?
我正在 return 从 Google 映射 API 中创建一个嵌套数组。我想要做的是在数组中找到某种类型。我正在使用 json_decode
将结果从 JSON 转换为 PHP。
这是正在 returned 的回复:
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
)
我需要做的是找到return long_name
或short_name
的特定类型。我希望这是有道理的。
所以基本上,如果类型 = 政治,那么 return 整个数组,这样我就可以访问 long_name 和 short_name。
我尝试使用 array_search,但没有得到任何结果。
感谢任何帮助!
这将 return 找到的第一个数组:
foreach($array['results'][0]['address_components'] as $v) {
if(is_array($v['types']) && in_array('political', $v['types'])) {
$result = $v;
break;
}
}
如果您想要多个,请使用 $result[] = $v;
并删除 break
。
您可以使用 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
)
)
)
我正在 return 从 Google 映射 API 中创建一个嵌套数组。我想要做的是在数组中找到某种类型。我正在使用 json_decode
将结果从 JSON 转换为 PHP。
这是正在 returned 的回复:
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
)
我需要做的是找到return long_name
或short_name
的特定类型。我希望这是有道理的。
所以基本上,如果类型 = 政治,那么 return 整个数组,这样我就可以访问 long_name 和 short_name。
我尝试使用 array_search,但没有得到任何结果。
感谢任何帮助!
这将 return 找到的第一个数组:
foreach($array['results'][0]['address_components'] as $v) {
if(is_array($v['types']) && in_array('political', $v['types'])) {
$result = $v;
break;
}
}
如果您想要多个,请使用 $result[] = $v;
并删除 break
。
您可以使用 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
)
)
)