0

我有一段惊人的代码可以计算出两个邮政编码之间的距离;距离(英里)和行驶时间。

现在的问题是 - 我得到的距离很长(例如:10.2454014 英里) 我只希望它只有 1 个小数位(例如 10.2 英里)。

另外,如果不是太难的话——当按原样运行上面的代码时,你会注意到行驶时间是 80 分钟。好吧,这很愚蠢。有谁知道如何让它在超过 60 分钟时以小时为单位表示时间,如果在 60 分钟以下则以分钟为单位?

如果有人可以提供帮助,那就太棒了——这段代码对人们真的很有用!

<?php
        function get_driving_information($start, $finish, $raw = false)
{
    if(strcmp($start, $finish) == 0)
    {
        $time = 0;
        if($raw)
        {
            $time .= ' seconds';
        }

        return array('distance' => 0, 'time' => $time);
    }

    $start  = urlencode($start);
    $finish = urlencode($finish);

    $distance   = 'unknown';
    $time       = 'unknown';

    $url = 'http://maps.googleapis.com/maps/api/directions/xml?origin='.$start.'&destination='.$finish.'&sensor=false';
    if($data = file_get_contents($url))
    {
        $xml = new SimpleXMLElement($data);

        if(isset($xml->route->leg->duration->value) AND (int)$xml->route->leg->duration->value > 0)
        {
            if($raw)
            {
                $distance = (string)$xml->route->leg->distance->text;
                $time     = (string)$xml->route->leg->duration->text;
            }
            else
            {
                $distance = (int)$xml->route->leg->distance->value / 1000 / 1.609344;
                $time     = (int)$xml->route->leg->duration->value/ 60;
            }
        }
        else
        {
            throw new Exception('Could not find that route');
        }

        return array('distance' => $distance, 'time' => $time);
    }
    else
    {
        throw new Exception('Could not resolve URL');
    }
}

try
{
    $info = get_driving_information('fy1 4bj', 'ls1 5ns');
    echo $info['distance'].' miles ' . 'That\'s about ' .$info['time'].' minutes drive from you';
}
catch(Exception $e)
{
    echo 'Caught exception: '.$e->getMessage()."\n";
}
?>
4

2 回答 2

1

使用number_format()将十进制/浮点值格式化为所需的小数点。使用gmdate()函数将时间(以秒为单位)转换为格式化值,例如:Hours:Mins:Sec

// Format Distance
$info['distance'] = number_format($info['distance'], 2);

// Format time
$info['time'] = gmdate('H:i:s', ($info['time'] * 60));

// Output
echo $info['distance'] .' miles ' . 'That\'s about ' .$info['time'].' minutes drive from you';
于 2013-10-22T19:33:47.473 回答
0

就四舍五入而言,只需执行以下操作:

echo round($info['distance'], 1) . ' miles '

对于您的 80 分钟 -> 1 小时 20 分钟,请参阅此帖子: https ://stackoverflow.com/a/8563576/2812842

于 2013-10-22T19:36:01.483 回答