Как получить значение расстояния от следующего объекта JSON?



Мне нужно получить значение 361714 из следующего объекта JSON в PHP. JSON получается с помощью Google distance matrix api.

Ссылка : https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=Washington,DC&destinations=New+York+City,NY&key=AIzaSyDVfbt8uCHfFTehDjDS-z_XfYF1O-lLDAE



{
"destination_addresses" : [ "New York, NY, USA" ],
"origin_addresses" : [ "Washington, DC, USA" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "225 mi",
"value" : 361714
},
"duration" : {
"text" : "3 hours 49 mins",
"value" : 13767
},
"status" : "OK"
}
]
}
],
"status" : "OK"


Я пробовал это :



for($f = 0; $f<count($address); $f++)
{
$url = "http://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&origins=" . $for_cust_add . "&destinations=" . $for_add[$f] . "&key=AIzaSyDVfbt8uCHfFTehDjDS-z_XfYF1O-lLDAE";
$json = file_get_contents($url);
$details = json_decode($json, true);
$distance = $details['rows']['elements']['distance']['value'];
$distance_array[$f] = $distance;
}


Это дает ошибку: элементы не определены.

612   4  

4 ответов:

Попробуйте с:

$distance = $details['rows'][0]['elements'][0]['distance']['value'];

$details['rows']['elements'] - это массив, и вам нужен его первый элемент, следовательно, добавленный [0]

Обновление-полное доказательство концепции для json в вопросе:

<?php
$json_file = '
{
   "destination_addresses" : [ "New York, NY, USA" ],
   "origin_addresses" : [ "Washington, DC, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "225 mi",
                  "value" : 361714
               },
               "duration" : {
                  "text" : "3 hours 49 mins",
                  "value" : 13767
               },
               "status" : "OK"
            }
         ]
      }
   ]
}';

$details = json_decode($json_file, true);
$distance = $details['rows'][0]['elements'][0]['distance']['value'];
print_r($distance);
?>

Приведенный выше код печатает 361714

Элементы и расстояние находятся внутри дополнительного массива, поэтому вы не можете получить к ним доступ, как вы пытаетесь:

$json = '{ "destination_addresses" : [ "New York, NY, USA" ],
           "origin_addresses" : [ "Washington, DC, USA" ],
           "rows" : [
              {
                 "elements" : [
                    {
                       "distance" : {
                          "text" : "225 mi",
                          "value" : 361714
                       },
                       "duration" : {
                          "text" : "3 hours 49 mins",
                          "value" : 13767
                       },
                       "status" : "OK"
                    }
                 ]
              }
           ],
           "status" : "OK" }';

$data = json_decode($json);

foreach ($data->rows as $row) {
    foreach ($row->elements as $element) {
        var_dump($element->distance->value);
    }
}

1-й: декодировать строку json и получить и объект; 2-й: доступ к объекту 1 на 1, сначала к строкам, а затем к элементам внутри строк;

Если вы хотите получить только первую запись, возвращенную запросом, то попробуйте:

$distance = $details['rows'][0]['elements'][0]['distance']['value'];

Если вы хотите проверить все элементы:

foreach($row in $details['rows'])
  foreach($element in $row['elements'])
    $distance = $element['distance']['value'];

В будущем используйте use print_r для отладки; тогда вы можете увидеть, как выглядит фактическая структура, возвращаемая json_decode.

print_r($details);

Используйте json_decode ()

//Enter your code here, enjoy!
$json_file = '
{
   "destination_addresses" : [ "New York, NY, USA" ],
   "origin_addresses" : [ "Washington, DC, USA" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "225 mi",
                  "value" : 361714
               },
               "duration" : {
                  "text" : "3 hours 49 mins",
                  "value" : 13767
               },
               "status" : "OK"
            }
         ]
      }
   ]
}';

// convert the string to a json object
$jsonObject = json_decode($json_file);
// read the distance object
$distance = $jsonObject->rows[0]->elements[0]->distance;
print_r($distance);
echo 'text= ' . $distance->text . ', value = ' . $distance->value;

Comments

    Ничего не найдено.