PHP Conference Japan 2024

min

(PHP 4, PHP 5, PHP 7, PHP 8)

min找出最小值

说明

min(mixed $value, mixed ...$values): mixed

可选的语法(不支持命名参数)

min(array $value_array): mixed

如果第一个且仅有的参数是数组,min() 返回该数组中最小的值。如果提供了至少两个参数,min() 返回其中最小的值。

注意:

不同类型的值将使用标准比较规则进行比较。例如,一个非数值的 string 将和一个 int 进行比较,就像它是 0 一样,但是多个非数值的 string 值将按字母顺序进行比较。实际返回的值将是原始类型,没有进行转换。

警告

当传递不同类型的参数时要小心,因为 min() 可能会产生不可预知的结果。

参数

value

任何可比较的值。

values

任何可比较的值。

value_array

包含值的数组。

返回值

min() 根据标准比较返回被认为“最低”的参数值。如果多个不同类型的值计算结果相等(例如 0'abc'),则返回提供给函数的第一个值。

错误/异常

如果传递了一个空数组,min() 会抛出一个 ValueError

更新日志

版本 说明
8.0.0 现在,min() 失败时会抛出一个 ValueError;以前,会返回 false 并发出一个 E_WARNING 错误。
8.0.0 由于 字符串与数字的比较发生了更改,min() 在这些情况下不再根据参数顺序返回不同的值。

范例

示例 #1 min() 的使用示例

<?php
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2

// 这里我们比较 -1 < 0,所以 -1 是最小值
echo min('hello', -1); // -1

// 当有多个不同长度的数组时,min 返回最短的数组
$val = min(array(2, 2, 2), array(1, 1, 1, 1)); // array(2, 2, 2)

// 多个相同长度的数组从左到右进行比较
// 所以在我们的示例中:2 == 2,但是 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)

// 如果同时给出了数组和非数组,则永远不会返回数组
// 因为比较时数组被认为大于任何其它值
$val = min('string', array(2, 5, 7), 42); // string

// 如果一个参数是 NULL 或布尔值,它将使用以下规则与其他值进行比较:FALSE < TRUE 且 NULL == FALSE,
// 而不考虑所涉及的其他类型
// 在下面的示例中,-10 和 10 在比较中都被视为 TRUE
$val = min(-10, FALSE, 10); // FALSE
$val = min(-10, NULL, 10); // NULL

// 另一方面,0 被视为 FALSE,因此“小于”TRUE
$val = min(0, TRUE); // 0
?>

参见

  • max() - 找出最大值
  • count() - 计算数组或 Countable 对象中元素的个数

添加注释

用户贡献的注释 12 条注释

up
5
volch5 at gmail dot com
10 年前
对 DateTime 对象使用 min()(和 max())会像日期一样比较它们(包括时区信息)并返回 DateTime 对象。
<?php
$dt1
= new DateTime('2014-05-07 18:53', new DateTimeZone('Europe/Kiev'));
$dt2 = new DateTime('2014-05-07 16:53', new DateTimeZone('UTC'));
echo
max($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T16:53:00+00:00
echo min($dt1,$dt2)->format(DateTime::RFC3339) . PHP_EOL; // 2014-05-07T18:53:00+03:00
?>

至少在 5.3.3-7+squeeze17 版本中有效
up
2
匿名用户
18 年前
千万不要将此函数与布尔变量一起使用!!!
否则你会得到类似这样的结果:min(true, 1, -2) == true;

只是因为
min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

请注意!
up
-1
harmor
16 年前
将整数限制在两个值之间的一种方法是

function bound($x, $min, $max)
{
return min(max($x, $min), $max);
}

这与以下代码相同

$tmp = $x;
if($tmp < $min)
{
$tmp = $min;
}
if($tmp > $max)
{
$tmp = $max;
}
$y = $tmp;

因此,例如,如果您想将整数限制在 1 到 12 之间

输入
$x = 0;
echo bound(0, 1, 12).'<br />';
$x = 1;
echo bound($x, 1, 12).'<br />';
$x = 6;
echo bound($x, 1, 12).'<br />';
$x = 12;
echo bound($x, 1, 12).'<br />';
$x = 13;
echo bound($x, 1, 12).'<br />';

输出
1
1
6
12
12
up
-2
steffen at morkland dot com
18 年前
> 千万不要将此函数与布尔变量一起使用!!!
> 否则你会得到类似这样的结果:min(true, 1, -2) == true;

> 只是因为
> min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

可以将它与布尔值一起使用,只是有一件事,在使用非严格比较 (==) 进行计算时,你需要记住,任何不是 bool false、0 或 NULL 的值都被认为是 true,例如:
(5 == true) = true;
(0 == true) = false;
true 实际上也是任何不是 0、false 和 null 的值。但是,当 true 转换为字符串或整数时,true == 1,因此当排序时 true = 1。但是如果 true 是最大数字,则返回 bool true。因此,为了确保,如果您只想匹配 true 是否为最大数字,请记住使用严格比较运算符 ===
up
-4
Teelevision
11 年前
一个返回不为 0 的最小整数的函数。
<?php
/* 类似于 min(),但强制转换为 int 并忽略 0 */
function min_not_null(Array $values) {
return
min(array_diff(array_map('intval', $values), array(0)));
}
?>
up
-4
DO
16 年前
我修改了无 bug 的 min 版本以忽略 NULL 值(否则它返回 0)。

<?php
function min_mod () {
$args = func_get_args();

if (!
count($args[0])) return false;
else {
$min = false;
foreach (
$args[0] AS $value) {
if (
is_numeric($value)) {
$curval = floatval($value);
if (
$curval < $min || $min === false) $min = $curval;
}
}
}

return
$min;
}
?>
up
-3
piotr_sobolewski at o2 dot nospampleasenono dot pl
17 年前
当你的数组同时包含字符串和数字时要非常小心。这段代码以奇怪的(尽管可以解释)方式工作
var_dump(max('25.1.1', '222', '99'));
var_dump(max('2.1.1', '222', '99'));
up
-4
hava82 at gmail dot com
13 年前
这是一个可以根据数组键找到最小值的函数

<?php
function min_by_key($arr, $key){
$min = array();
foreach (
$arr as $val) {
if (!isset(
$val[$key]) and is_array($val)) {
$min2 = min_by_key($val, $key);
$min[$min2] = 1;
} elseif (!isset(
$val[$key]) and !is_array($val)) {
return
false;
} elseif (isset(
$val[$key])) {
$min[$val[$key]] = 1;
}
}
return
min( array_keys($min) );
}
?>
up
-4
matt at borjawebs dot com
14 年前
返回包含相同最小值的数组键的数组的精简版本(和可能的应用)

<?php
// 数据
$min_keys = array();
$player_score_totals = array(
'player1' => 300,
'player2' => 301,
'player3' => 302,
'player4' => 301,
...
);

// 搜索具有 min() 值的数组键
foreach($player_score_totals as $playerid => $score)
if(
$score == min($player_score_totals)) array_push($min_keys, $playerid);

print_r($min_keys);
?>
up
-5
php at keith tyler dot com
14 年前
如果 NAN 是 min() 的第一个参数,则始终返回第二个参数。

如果 NAN 是第二个参数,则始终返回 NAN。

对于 max(),关系相同但相反。

<?php
// 为了简洁起见,省略了 \n
print max(0,NAN);
print
max(NAN,0);
print
min(0,NAN);
print
min(NAN,0);
?>

返回
0
NAN
NAN
0
up
-5
8ilO
7 年前
一个 min_by 函数
<?php
function min_by(Array $arr, Callable $func){
$mapped = array_map($func, $arr);
return
$arr[array_search(min($mapped), $mapped)];
}
$a = ["albatross", "dog", "horse"];
echo
min_by($a, "strlen"); // dog
?>
up
-5
nonick AT 8027 DOT org
20 年前
我使用 max() 函数进行了测试,但我认为这同样适用于 min() 函数:如果你处理的是数字,那么你可以使用

$a = ($b < $c) ? $b : $c;

这比以下方式略快(大约 16%)

$a = min($b, $c);

我使用整数和浮点数在多个循环中进行了测试,超过 100 万次迭代。

我正在运行 PHP 4.3.1 作为 Apache 1.3.27 的模块。
To Top