搜索一个json文件

时间:2019-04-22 02:41:35

标签: php json

我有一个文件test.json见下文

[
 {
   "ID": "01AD003",
   "Name": "ST. FRANCIS RIVER AT OUTLET OF GLASIER LAKE",
   "Latitude": 47.20661,
   "Longitude": -68.95694,
   "Prov": "NB",
   "Timezone": "UTC-04:00"
 },
 {
   "ID": "01AD004",
   "Name": "SAINT JOHN RIVER AT EDMUNDSTON",
   "Latitude": 47.36078,
   "Longitude": -68.32489,
   "Prov": "NB",
   "Timezone": "UTC-04:00"
 },
 {
   "ID": "01AF002",
   "Name": "SAINT JOHN RIVER AT GRAND FALLS",
   "Latitude": 47.03889,
   "Longitude": -67.73972,
   "Prov": "NB",
   "Timezone": "UTC-04:00"
 }
]

我正在尝试根据ID元素搜索此文件,并使用php返回纬度和经度

我尝试添加本地字符串:

function getLatLong($id) 
{

    $str = file_get_contents("./hydrometric_StationList.json");

    $json = json_decode($str);
    foreach($json->local as $item)
    {
        if($item->ID == $id)
        {
            return $item->Latitude.",".$item.Latitude;
        }
    }

}

2 个答案:

答案 0 :(得分:1)

您可以将true用作json_decode上的第二个参数,以将其解码为关联数组而不是对象。您可以执行一个简单的foreach循环,例如:

function getLatLong($id) 
{

    $str = file_get_contents("./hydrometric_StationList.json");
    $json = json_decode($str, true);

    foreach($json as $item)
    {
        if($item['ID'] == $id)
        {
            return $item['Latitude'].",".$item['Latitude'];
        }
    }
}

echo getLatLong("01AF002");将导致:47.03889,47.03889

答案 1 :(得分:1)

您的代码中有几个错误。

在您的foreach()中,您有$json->local,但是local不在数据中。只需删除->local部分。

return中,您有$item.Latitude,它们都不应该是.,并且会再次返回纬度,因此请将其更改为$item->Longitude ... < / p>

function getLatLong($id) 
{

    $str = file_get_contents("./hydrometric_StationList.json");

    $json = json_decode($str);
    foreach($json->local as $item)
    {
        if($item->ID == $id)
        {
            return $item->Latitude.",".$item->Longitude;
        }
    }

}