3

你会如何最好地编写一个函数来min()在 PHP 中选择,但忽略空值?

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

我知道你可以用ifetc 做到这一点,但我认为会有更优雅的方式?

4

3 回答 3

5
function($var1,$var2) {
  return min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX);
}

请注意,它也会被0视为“未定义”。

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

于 2012-07-09T11:57:33.100 回答
5

我想你可以这样做array_filter

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

array_filter从数组中删除所有评估为 boolean 的项目falsemin然后从数组中获取最低的项目。请注意,0将被删除。

于 2012-07-09T11:58:45.817 回答
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); 
}   

(小心使用三等式===)

于 2014-01-31T21:45:10.057 回答