此脚本检索数组中的最后一个值。
$min = array_reduce($values, function($min, $i) {
if (is_numeric($i) && $i < $mn) {
return $i;
}
return $min;
});
//just an output for myself in case the value is non numeric
if (!is_numeric($min)){
$min="not numeric";
}
我遇到的问题是该值可能不是数字,而我需要最小的数字-总是存在和数值。 我如何创建一个循环,将一直搜索直到找到最小的数值? 任何帮助,不胜感激。 预先感谢,
答案 0 :(得分:1)
一种快速的方法是过滤数组(使用array_filter()
)-仅保留数值,然后使用min()
获得最小的值...
$data = ["a", 1, 1.2, "b", 129000, "r", "0.1"];
echo min(array_filter($data, "is_numeric"));
显示
0.1
这假定尽管源数据中的字符串是0.1,但实际上它是数字,因此在您定义为数字时就算在内。
如果您想坚持使用循环,则将保留$min
运行值,并在开始时将其设置为null。然后遍历数据,并检查新值是否为数字,是否为第一个值或小于现有最小值,然后设置新的最小值。
$min = null;
foreach ( $data as $value ) {
if ( is_numeric($value) && ($min == null || $min > $value )) {
$min = $value;
}
}
答案 1 :(得分:0)
首先对数组进行排序。然后尝试使用for循环,直到找到一个数值。最小的数值将是对数组排序后的第一个数值。尝试使用以下代码。
假设数组为$array
sort($array);
foreach($numbers as $array)
{
if(is_numeric($array))
{
echo $array;
break;
}
else
{
continue;
}
}
我同意@Nigel Ren的回答,使用array_filter
函数比使用循环要快