2

我有以下数组输出:

Array ( 
    [0] => SimpleXMLElement Object ( [0] => 32.4 km )
    [1] => SimpleXMLElement Object ( [0] => 10.2 km )
    [2] => SimpleXMLElement Object ( [0] => 205 km )
    [3] => SimpleXMLElement Object ( [0] => 50.8 km ) 
)

我试图从特定地址获得最短距离,从这个结果中最短的是 10.2 公里。如何比较所有公里距离并仅显示数字最小的距离?

我的主要目标是根据这个数组结果获得最短距离。

4

3 回答 3

2

floatval()使用和从数组中提取数值array_map(),然后使用min()查找数组中的最小值:

echo min(array_map('floatval', $array));    

演示:http ://codepad.org/LRNig19H

于 2013-01-25T02:27:33.673 回答
1

如果您想重新使用SimpleXMLElement包含最低距离值的整体而不只是打印距离(假设对象包含的数据不仅仅是距离),您可以根据需要调整此代码段:

$lowest_item = NULL; 
$lowest_value = NULL;
// iterate over all SimpleXMLElements as a reference for later re-use
foreach ($array as &$item) {
    // extract number from string -- adjust $item[0] to the real object property
    $numeric_value = floatval($item[0]);
    // check if current item is lower than one of the previous
    if ($lowest_value == NULL || $lowest_value >= $numeric_value) {
        $lowest_item = $item;
        $lowest_value = $numeric_value;
    }
}
var_dump($lowest_item);
于 2013-01-25T02:19:58.410 回答
1
$min_distance = $array[0][0];

foreach($array as $distance)
  $min_distance = (filter_var($distance[0], FILTER_SANITIZE_NUMBER_FLOAT) < filter_var($min_distance, FILTER_SANITIZE_NUMBER_INT)) ? $distance[0] : $min_distance;

echo $min_distance;

因为我不知道你的数组叫什么,所以我用了$array. 希望对你有帮助!

关于我使用的方法的一点解释。

foreach遍历数组的每个元素。当前节点将保存在变量 after 中as

filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT)正在用字符串制作一个数字,而不是完全由数字组成。表示"23.5 km"转换为23.5.

(boolean) ? value1 : value2只是一个简短的 if 语句。如果boolean为真,则表达式 eqauls value1,如果不是value2

我希望这会有所帮助。

于 2013-01-25T02:14:09.140 回答