min function that ignores negative values in php

2019-07-25 10:57发布

I have three numbers:

$a = 1
$b = 5
$c = 8

I want to find the minimum and I used the PHP min function for that. In this case it will give 1.

But if there is a negative number, like

$a = - 4
$b = 3
$c = 9

now the PHP min() should give $b and not $a, as I just want to compare positive values, which are $b and $c. I want to ignore the negative number.

Is there any way in PHP? I thought I will check if the value is negative or positive and then use min, but I couldn't think of a way how I can pass only the positive values to min().

Or should I just see if it's negative and then make it 0, then do something else?

标签: php min
3条回答
小情绪 Triste *
2楼-- · 2019-07-25 11:33
$INF=0x7FFFFFFF;

min($a>0?$a:$INF,$b>0?$b:$INF,$c>0?$c:$INF) 

or

min(array_filter(array($a,$b,$c),function($x){
    return $x>0;
}));
查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-07-25 11:40

http://codepad.org/DVgMs7JF

<?
$test = array(-1, 2, 3);

function removeNegative($var)
{
   if ($var > 0)
       return $var;
}

$test2 = array_filter($test, "removeNegative");

var_dump(min($test2));
?>
查看更多
倾城 Initia
4楼-- · 2019-07-25 11:49

You should simply filter our the negative values first.

This is done easily if you have all of them in an array, e.g.

$a = - 4;
$b = 3;
$c = 9;

$values = array($a, $b, $c);
$values = array_filter($values, function($v) { return $v >= 0; });
$min = min($values);

print_r($min);

The above example uses an anonymous function so it only works in PHP >= 5.3, but you can do the same in earlier versions with

$values = array_filter($values, create_function('$v', 'return $v >= 0;'));

See it in action.

查看更多
登录 后发表回答