【问题标题】:How can I find a value in a nested array and then return that parent? [closed]如何在嵌套数组中找到一个值,然后返回该父级? [关闭]
【发布时间】:2019-08-29 22:20:11
【问题描述】:

我从 Google 地图 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_nameshort_name。我希望这是有道理的。

所以基本上如果 type = 政治然后返回整个数组,这样我就可以访问 long_name 和 short_name。

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

感谢所有帮助!

【问题讨论】:

    标签: php arrays api google-maps-api-3


    【解决方案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

    【讨论】:

    • 看起来我收到一个错误,参数 2 应该是一个数组。对于这一行if(in_array('political', $v['types'])) {
    • 那么您的阵列与您在问题中发布的不同。已编辑。
    • 我已添加来自 Google API 的完整响应。我还缺少其他东西吗?
    • 你错过了['results'][0]['address_components']
    • 知道了。太感谢了!非常感谢您的帮助!
    【解决方案2】:

    你可以使用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
                )
        )
     )
    

    【讨论】:

    • 嗨。我也从这段代码中得到了一个错误。 if(in_array($findType, $v['types'])) 行说 in_array 应该是一个数组。但它是一个字符串,因为它是$findType。想法?
    • @Lz430 请分享您的完整数组
    • 我在上面的问题代码中添加了完整的回复。您实际上可以在这里看到回复:endeavorsdev1.wpengine.com/all-locations 只需输入邮政编码 78210
    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多