【问题标题】:PHP min() but not emptyPHP min() 但不为空
【发布时间】:2012-07-08 19:39:54
【问题描述】:

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

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

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

【问题讨论】:

  • 定义“空”?在处理数字时,没有什么是空的。
  • @TomvanderWoerdt:你是对的......好吧,如果没有定义变量?还是没有价值?如果我错了,请纠正我,但是在 php 中,您不会预先将变量定义为整数或字符串,并且您可以轻松地将数字分配给以前是字符串的变量,不是吗?
  • 您不应该将不存在的变量传递给函数,即使在 PHP 中也是如此。

标签: php function min


【解决方案1】:
function($var1,$var2) {
  return min($var1 ?: PHP_INT_MAX, $var2 ?: PHP_INT_MAX);
}

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

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

【讨论】:

  • 这适用于大多数情况...但是如果 var1 和 var2 都为空,您将得到 PHP_INT_MAX,而不是空。
  • @Ray 这确实是个问题。另一方面,OP 想要最小值 ignoring 空值,因此当 all 值为空时,所有值都应该被忽略并且行为是未定义的,可以表示由PHP_INT_MAX。不知何故,这就是“无中的最小值”,这是总体最大值(一个 every 值小于)
【解决方案2】:

我猜你可以使用array_filter

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

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

【讨论】:

  • 我无法控制我的数组接收的元素数量,因此一个简单的去除空值的函数至关重要。这个解决方案非常完美。
  • 如果 var1 和 var2 都是 falsy 会抛出错误。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多