从包含空值的数组中获取最小值

14
在PHP中从包含某些null值的数组中获取最小值。我有一个像这样的数组。
array(10,20,null,60)

由于数组中包含空值,因此php的min函数返回0作为最小值,但我需要例如10作为最小值。有人可以帮我吗?


1
在使用 min() 函数之前,先过滤数组:$smallest = min(array_filter($array, function ($v) { return !is_null($v); })); - Amal Murali
1
array_filter函数也会移除零值,我觉得。 - Sergiu Paraschiv
实际上,它会删除任何求值为 false 的内容,因此请参考 http://php.net/manual/ro/language.types.boolean.php#language.types.boolean.casting。 - Sergiu Paraschiv
可能是从数组中排除NULL或ZERO值的最大和最小整数的重复问题。 - Amal Murali
@SergiuParaschiv,你是正确的。 - Shankar Narayana Damodaran
4个回答

22

使用array_diff()函数排除null值,然后使用min()函数:

$r = array_diff(array(10, 20, null, 60), array(null));
min($r);

聪明!我很欣赏这个。 - Ryan

6

使用 array_filter() 作为包装器,使用 strlen 作为回调函数。

echo min(array_filter($arr,'strlen'));

Demonstration


我的答案几乎一样,所以我已经删除了我的 :) - Awlad Liton
@AwladLiton,不一样,实际上你的甚至会过滤零。顺便说一下,我不是那个给你点踩的人。 - Shankar Narayana Damodaran
这个指责说这个答案会删除零值是不正确的。这个答案会删除所有在转换为字符串后长度为零的值,比如falsenull。证明:https://3v4l.org/EsqRp - undefined

-1

尝试

    function min($array){
         $min = 1000;//max value you expect
       for($i=0; $i<sizeof($array); $i++){

            if($array[$i] < $min && $array[$i] != null)
                   $min = $array[$i];

       }
       return $min;
    }

-1
假设您的数组“可能”包含所有的NULL值,之前提到的方法将不起作用。我想到的最简单的解决方案是:
min(array_replace([$defaultValue], array_filter($array)));

array_filter函数将筛选出所有的NULL值。 array_replace函数将覆盖默认值,如果array_filter返回一个包含至少一个值的数组。 这将允许从原始数组返回最小值,除非所有的值都是NULL,那么将返回默认值。

array_filter()函数的默认行为会删除零值。https://3v4l.org/FiWb0 - undefined
@mickmackusa是对的。应该是"array_filter($array, 'is_numeric')"。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接