检索数组中的最小数值

时间:2019-01-26 07:30:52

标签: php

此脚本检索数组中的最后一个值。

$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";
}

我遇到的问题是该值可能不是数字,而我需要最小的数字-总是存在和数值。 我如何创建一个循环,将一直搜索直到找到最小的数值? 任何帮助,不胜感激。 预先感谢,

2 个答案:

答案 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函数比使用循环要快