JSON -> массив PHP, трудно найти индексный путь к определенному значению

У меня есть строка JSON, которую я преобразовал в ассоциативный массив PHP с помощью «json_decode». По какой-то причине я не могу понять, как найти индексный путь к значению, которое я ищу внутри массива.

Вот строка JSON:

    {
  "status": "OK",
  "results": [ {
    "types": [ "street_address" ],
    "formatted_address": "175 Hemenway St, Boston, MA 02115, USA",
    "address_components": [ {
      "long_name": "175",
      "short_name": "175",
      "types": [ "street_number" ]
    }, {
      "long_name": "Hemenway St",
      "short_name": "Hemenway St",
      "types": [ "route" ]
    }, {
      "long_name": "Boston",
      "short_name": "Boston",
      "types": [ "locality", "political" ]
    }, {
      "long_name": "Boston",
      "short_name": "Boston",
      "types": [ "administrative_area_level_3", "political" ]
    }, {
      "long_name": "Suffolk",
      "short_name": "Suffolk",
      "types": [ "administrative_area_level_2", "political" ]
    }, {
      "long_name": "Massachusetts",
      "short_name": "MA",
      "types": [ "administrative_area_level_1", "political" ]
    }, {
      "long_name": "United States",
      "short_name": "US",
      "types": [ "country", "political" ]
    }, {
      "long_name": "02115",
      "short_name": "02115",
      "types": [ "postal_code" ]
    } ],
    "geometry": {
      "location": {
        "lat": 42.3411740,
        "lng": -71.0912860
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "southwest": {
          "lat": 42.3380264,
          "lng": -71.0944336
        },
        "northeast": {
          "lat": 42.3443216,
          "lng": -71.0881384
        }
      }
    }
  } ]
}

а вот вывод var_dump ассоциативного массива в PHP

array(2) { ["status"]=> string(2) "OK" ["results"]=> array(1) { [0]=> array(4) { ["types"]=> array(1) { [0]=> string(14) "street_address" } ["formatted_address"]=> string(38) "175 Hemenway St, Boston, MA 02115, USA" ["address_components"]=> array(8) { [0]=> array(3) { ["long_name"]=> string(3) "175" ["short_name"]=> string(3) "175" ["types"]=> array(1) { [0]=> string(13) "street_number" } } [1]=> array(3) { ["long_name"]=> string(11) "Hemenway St" ["short_name"]=> string(11) "Hemenway St" ["types"]=> array(1) { [0]=> string(5) "route" } } [2]=> array(3) { ["long_name"]=> string(6) "Boston" ["short_name"]=> string(6) "Boston" ["types"]=> array(2) { [0]=> string(8) "locality" [1]=> string(9) "political" } } [3]=> array(3) { ["long_name"]=> string(6) "Boston" ["short_name"]=> string(6) "Boston" ["types"]=> array(2) { [0]=> string(27) "administrative_area_level_3" [1]=> string(9) "political" } } [4]=> array(3) { ["long_name"]=> string(7) "Suffolk" ["short_name"]=> string(7) "Suffolk" ["types"]=> array(2) { [0]=> string(27) "administrative_area_level_2" [1]=> string(9) "political" } } [5]=> array(3) { ["long_name"]=> string(13) "Massachusetts" ["short_name"]=> string(2) "MA" ["types"]=> array(2) { [0]=> string(27) "administrative_area_level_1" [1]=> string(9) "political" } } [6]=> array(3) { ["long_name"]=> string(13) "United States" ["short_name"]=> string(2) "US" ["types"]=> array(2) { [0]=> string(7) "country" [1]=> string(9) "political" } } [7]=> array(3) { ["long_name"]=> string(5) "02115" ["short_name"]=> string(5) "02115" ["types"]=> array(1) { [0]=> string(11) "postal_code" } } } ["geometry"]=> array(3) { ["location"]=> array(2) { ["lat"]=> float(42.341174) ["lng"]=> float(-71.091286) } ["location_type"]=> string(7) "ROOFTOP" ["viewport"]=> array(2) { ["southwest"]=> array(2) { ["lat"]=> float(42.3380264) ["lng"]=> float(-71.0944336) } ["northeast"]=> array(2) { ["lat"]=> float(42.3443216) ["lng"]=> float(-71.0881384) } } } } } }

В идеале мне нужен массив под индексом «местоположение» (значения под ключами lat и lng)

Кажется, я не могу продвинуться дальше array_name["results"]

Может быть, есть альтернатива var_dump, которая будет разделять строки и делать отступы для многоуровневых массивов, чтобы я мог их понять? Я бы предпочел работать с прямым путем, чем рекурсивно искать по всему массиву, чтобы найти то, что я ищу. Спасибо!


person Casey Flynn    schedule 17.01.2011    source источник


Ответы (2)


Вы пытались получить доступ к «местоположению» таким образом?:

$location = $array_name['results'][0]['geometry']['location'];
$lat = $location['lat'];
$lng = $location['lng'];
person scoffey    schedule 17.01.2011
comment
Вот и все, спасибо @scoffey. Мне очень трудно сопоставить начальные/конечные скобки и определить, когда заканчивается один массив и начинается другой. Есть ли хорошая техника или вы просто хорошо разбираетесь в строках данных и понимаете их? ха-ха - person Casey Flynn; 17.01.2011
comment
Хорошие редакторы, такие как vim, подсвечивают открывающие/закрывающие скобки. Кстати, print_r является альтернативой var_dump. См.: stackoverflow.com/questions /1168175/ - person scoffey; 17.01.2011

Может быть, есть альтернатива var_dump, которая будет разделять строки и делать отступы для многоуровневых массивов, чтобы я мог их понять?

Print_r, var dump и var экспортируют весь вывод как отдельный многострочный текст.

http://ca2.php.net/print_r
http://ca2.php.net/manual/en/function.var-dump.php< br> http://ca2.php.net/manual/en/function.var-export.php

Вы просто этого не видите, потому что просматриваете обработанные результаты HTML-документа, а не необработанный текст. Просмотрите исходный код или замените новые строки <br/> элементами HTML или заключите вывод в теги <pre>.

Помните, что браузеры склонны игнорировать пробелы, такие как новые строки и отступы, при рендеринге.

person Incognito    schedule 17.01.2011