你如何最好编写一个函数来选择PHP中的min()
,但忽略空值?
function minvar($var1,$var2) {
$min=min($var1,$var2);
return $min;
}
我知道你可以用if
等来做,但我认为会有更优雅的方式吗?
答案 0 :(得分:5)
function($var1,$var2) {
return min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX);
}
请注意,它也会将0
视为“未定义”。
更新:当所有值都为空时,将返回PHP_INT_MAX
。在此实现中,它旨在,因为OP明确要求忽略空值。因此,当忽略所有值时,最小值实际上是总体最大值(以某种方式)。我的主要目的是保持返回值的严格:当方法说忽略空值时,它会出乎意料,在某些情况下,它仍然会返回null
。
答案 1 :(得分:5)
我猜你可以用array_filter
:
function($var1,$var2) {
$min=min(array_filter(array($var1,$var2)));
return $min;
}
array_filter
删除数组中评估为布尔false
的所有项。然后min
从数组中获取最低项。请注意,0
将被删除。
答案 2 :(得分:1)
King Crunch的方法不适用于像DateTime对象这样的非整数类型。下面的代码确实:
function minnotnull($var1, $var2) {
if($var1 === null) { return $var2; }
if($var2 === null) { return $var1; }
return min($var1, $var2);
}
function maxnotnull($var1, $var2) {
if($var1 === null) { return $var2; }
if($var2 === null) { return $var1; }
return max($var1, $var2);
}
(小心使用三重等式===)