如何在嵌套数组中找到一个值,然后 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_nameshort_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
            )
    )
 )