首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在嵌套数组中找到一个值,然后返回该父数组?

如何在嵌套数组中找到一个值,然后返回该父数组?
EN

Stack Overflow用户
提问于 2019-04-09 01:44:48
回答 2查看 117关注 0票数 -4

我从Google地图API返回一个嵌套数组。我要做的是在数组中找到一个特定的类型。我使用json_decode将结果从JSON转换为PHP。下面是返回的响应:

代码语言:javascript
复制
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_nameshort_name。我希望这是有意义的。

所以基本上,如果类型= political,那么返回整个数组,这样我就可以访问long_name和short_name。

我尝试使用array_search,但没有得到任何结果。

任何和所有的帮助是感激的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-09 01:51:10

这将返回找到的第一个数组:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-04-09 02:06:29

您可以使用array_map函数完成此操作

代码语言:javascript
复制
$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);

结果:

代码语言:javascript
复制
Array
(
  [0] => Array
    (
        [long_name] => Bexar County
        [short_name] => Bexar County
        [types] => Array
            (
                [0] => administrative_area_level_2
                [1] => political
            )
    )
 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55578981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档