PHP min()但不是空的

PHP min()但不是空的,php,function,min,Php,Function,Min,在PHP中如何编写一个函数来选择min(),但忽略空值 function minvar($var1,$var2) { $min=min($var1,$var2); return $min; } 我知道你可以用if等来做,但我想会有更优雅的方式吗 function($var1,$var2) { return min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX); } 注意,它也将0视为“未定义” 更新:当所有值都为空时,将返回PHP

在PHP中如何编写一个函数来选择
min()
,但忽略空值

function minvar($var1,$var2) {
    $min=min($var1,$var2);
    return $min;
}
我知道你可以用
if
等来做,但我想会有更优雅的方式吗

function($var1,$var2) {
  return min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX);
}
注意,它也将
0
视为“未定义”


更新:当所有值都为空时,将返回
PHP\u INT\u MAX
。在这个实现中,这是有意的,因为OP明确要求忽略空值。因此,当忽略所有值时,最小值实际上是总体最大值(不知何故)。我的主要意图是保持返回值的严格性:当方法说忽略空值时,这将是意外的,在某些情况下,它仍然返回
null

我想您可以使用
数组过滤器
来实现这一点:

function($var1,$var2) {
    $min=min(array_filter(array($var1,$var2)));
    return $min;
}

array\u filter
从数组中删除所有计算结果为布尔值的项
false
min
然后从数组中获取最低的项。请注意,
0
将被删除。

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); 
}   

(小心使用三重相等==)

定义“空”?在处理数字时,没有空的东西。@TomvanderWoerdt:你说得对。。。如果一个变量没有定义?还是没有价值?如果我错了,请纠正我,但在php中,您没有预先将变量定义为整数或字符串,并且您可以轻松地为以前是字符串的变量分配一个数字,不是吗?您不应该将不存在的变量传递给函数,即使在php中也是如此。这在大多数情况下都适用。。。但是,如果var1和var2都为null,您将得到PHP_INT_MAX,而不是null。@Ray这确实是个问题。另一方面,OP希望最小值忽略空值,因此当所有值都为空时,应该忽略所有值,并且行为有点未定义,这可以用
PHP\u INT\u MAX
表示。这就是“无中的最小值”,即总体最大值(每个值都小于该值),我无法控制数组接收的元素数,因此一个简单的函数来剥离空值是至关重要的。此解决方案非常完美。如果var1和var2都是错误的,则会抛出错误。