我有以下数组输出:
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距离并只显示数字最小的那个?
我的主要目标是根据此数组结果获得最短距离。
答案 0 :(得分:2)
使用floatval()
和array_map()
从数组中提取数值,然后使用min()
查找数组中的最小值:
echo min(array_map('floatval', $array));
答案 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);