【问题标题】:PHP - Parsing Json correctlyPHP - 正确解析 Json
【发布时间】:2016-07-18 15:36:19
【问题描述】:

我有一个 json 解码,看起来像:

[Guadeloupe] => stdClass Object
    (
        [579650] => stdClass Object
            (
                [name] => Carat
                [postal_code] => 97139
                [lat] => 16,275890246307
                [lng] => -61,511925458908
                [url] => 579650-carat
                [pos_type_has_page] => t
            )
         [579651] => stdClass Object
            (
                [name] => Carat
                [postal_code] => 97139
                [lat] => 16,275890246307
                [lng] => -61,511925458908
                [url] => 579650-carat
                [pos_type_has_page] => t
            )
        [579655] => stdClass Object
            (
                [name] => Carat
                [postal_code] => 97139
                [lat] => 16,275890246307
                [lng] => -61,511925458908
                [url] => 579650-carat
                [pos_type_has_page] => t
            )
    )

[Martinique] => stdClass Object
    (
        [154161] => stdClass Object
            (
                [name] => Grain D'Or 
                [postal_code] => 97232 
                [lat] => 14,619419176343
                [lng] => -61,020416975021
                [url] => 154161-grain-dor-
                [pos_type_has_page] => t
            )

    )

[Guyane française] => stdClass Object
    (
        [154146] => stdClass Object
            (
                [name] => Bijouterie Buirette
                [postal_code] => 97300
                [lat] => 4,935763
                [lng] => -52,333749
                [url] => 154146-bijouterie-buirette
                [pos_type_has_page] => t
            )

    )

实际上我不知道如何正确地从中获取值,而不使用许多循环 foreach($key => $value),我想获取这些数据:

$country、$name、$lat、$lng 并将它们存储在数组中。

$store = array(
     'country'=>$country,
     'name'=>$name,
     'lat'=>$lat,
     'lng '=>$lng ,
)

这是我当前的代码:

foreach($content as $store) {
            $store = (array) $store;

            foreach($store as $key => $value) {
                $country = $key;
                $value = (array) $value;
                foreach($value as $key1 => $data) {
                    $title = $data->name;
                    $coordlat = $data->lat;
                    $coordlng = $data->lng;     

                    $store_data = array(
                        'name'=>$title,
                        'latitude'=>$coordlat,
                        'longitude'=>$coordlng,
                        'original_country'=>$country,
                    );
                }
            }
        }

感谢您的帮助

【问题讨论】:

  • 您的前 2 个 foreach 循环就足够了,只需使用 $value->name 等等。此外,您不需要将对象转换为数组。
  • 国家可能有很多商店,我编辑了我的第一条消息,所以 $value->name 我认为它不起作用
  • 它应该仍然可以工作。
  • 就像这样:pastebin.com/S7UhC1Wh

标签: php json


【解决方案1】:

在 json_decode() 函数中尝试一个选项 'assoc'=true。它将对象转换为在 php 中更方便处理的数组。然后你可以像这样检索你的数据:

$retrieved_data = json_decode($json_data,true);
$name = $retrieved_data['Martinique']['154161']['name'];

【讨论】:

    【解决方案2】:
     $allStore = array();    
    foreach($content as $storeArray) {
    
         foreach($storeArray as $key => $value) {
                   $country = $key;
                   $name = $value->name;
                   $latitude = $value->lat;
                   $longitude = $value->lng;
                   $store = array(
                          'name'=>$name,
                        'latitude'=>$latitude,
                        'longitude'=>$longitude,
                        'country'=>$country
                    )
    
    
    
                }
    
    //if you want, you can actually now store each of the data formatted out into another array i.e multidimensional array
    
           $allStore[] = $store;
            }
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多