比较与JSON数组的行驶距离

时间:2018-06-26 14:00:55

标签: php json laravel-5

我正在使用googledistancematrix api计算从登录用户到数据库所有字段的距离。那是我的控制器代码。

$field_list = Field::all();
for ($i=0; $i < count($field_list); $i++)
    { 
        $destination = $field_list[$i]['latitude'] . "," . $field_list[$i]['longitude'];
        $details = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=$origin&destinations=$destination&mode=driving&sensor=false";
        $json = file_get_contents($details);
        $details = json_decode($json, TRUE);
        if (count($details['destination_addresses']) > 0 )
        {
            $distance = $details['rows'][0]['elements'][0]['duration']['text'];
            $field_list[$i]->distance = $distance;
        }
    }

通过这种方式,我得到以下回应:

https://jsoneditoronline.org/?id=a35cedef327244ceb19ed35a2a4c8ddf

但是我只想显示其distance < or = 30 mins的那些字段。 谢谢

2 个答案:

答案 0 :(得分:1)

使用strtotime()将时间转换为秒很简单,如下所示:

$time=strtotime($details['rows'][0]['elements'][0]['duration']['text']);
if (($time-time()>1800) {
    // ignore this element, probably in loop so do a continue
}

这是基于上面的示例行,该示例行仅适用于单个元素。您需要将其包装成一个循环,并对每个元素执行计算。

答案 1 :(得分:0)

您可以使用 strtotime

$min = strtotime("30 mins");
$val = strtotime("0 hours 10 mins");

echo $min <= $val? "yes":"no";

({here,如果要测试)

就您而言

if (count($details['destination_addresses']) > 0 ){
    $min = strtotime("30 mins");
    $distance = $details['rows'][0]['elements'][0]['duration']['text'];

    if($min <= strtotime($distance)){
           //do your logic
    }
}