3

min()空の値を無視して、PHP で選択する関数をどのように記述するのが最善でしょうか?

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

etcでできることは知っていますがif、もっとエレガントな方法があると思いましたか?

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_filterboolean に評価されるすべての項目を配列から削除します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 に答える