查找数组中数值最小的节点

时间:2013-01-25 02:08:21

标签: php

我有以下数组输出:

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 km。如何比较所有km距离并只显示数字最小的那个?

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

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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遍历数组的每个元素。当前节点将在as之后的变量中保护。

filter_var($var, FILTER_SANITIZE_NUMBER_FLOAT)正在使用字符串编号,这不是完全由数字组成的。方法"23.5 km"转换为23.5

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

我希望有所帮助。

答案 2 :(得分: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);