min

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

min查找最小值

描述

min(混合 $value, 混合 ...$values): 混合

替代签名(不支持命名参数)

min(数组 $value_array): 混合

如果第一个也是唯一的参数是数组,min() 返回该数组中的最小值。如果至少提供了两个参数,min() 返回这些值中最小的一个。

注意:

不同类型的数值将使用 标准比较规则 进行比较。例如,非数值 字符串 将与 整数 进行比较,就像它是 0 一样,但多个非数值 字符串 值将按字母顺序进行比较。返回的实际值将是原始类型,不会应用任何转换。

警告

在传递不同类型参数时要小心,因为 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 对象中所有元素的数量

添加笔记

用户贡献笔记 17 个笔记

volch5 at gmail dot com
10 年前
min()(和 max())在 DateTime 对象上比较它们像日期(带有时区信息)一样并返回 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 中有效
匿名
18 年前
切勿对布尔变量使用此函数!!!
否则你将得到类似这样的结果:min(true, 1, -2) == true;

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

你已经被警告了!
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
Teelevision
10 年前
一个返回非零最小整数的函数。
<?php
/* like min(), but casts to int and ignores 0 */
function min_not_null(Array $values) {
return
min(array_diff(array_map('intval', $values), array(0)));
}
?>
steffen at morkland dot com
18 年前
> 切勿对布尔变量使用此函数!!!
> 否则你将得到类似这样的结果:min(true, 1, -2) == true;

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

可以使用它处理布尔值,只需要记住一件事,当使用非严格比较 (==) 评估时,任何不是布尔 false、0 或 NULL 的值都被认为是 true,例如。
(5 == true) = true;
(0 == true) = false;
true 实际上也是除了 0、false 和 null 之外的任何其他值。但是当 true 被转换为字符串或整数时,true == 1,因此在排序时 true = 1。但是如果 true 是最大数,则返回布尔值 true。所以为了确保,如果你只希望匹配 true 是最大数的情况,请记住使用严格比较运算符 ===
DO
16 年前
我已经修改了无错误的 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;
}
?>
hava82 at gmail dot com
12 年前
以下函数可以通过数组键查找最小值

<?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) );
}
?>
piotr_sobolewski at o2 dot nospampleasenono dot pl
16 年前
当数组同时包含字符串和数字时,要非常小心。这段代码以奇怪的方式工作(尽管可以解释)
var_dump(max('25.1.1', '222', '99'));
var_dump(max('2.1.1', '222', '99'));
php at keith tyler dot com
13 年前
如果 NAN 是 min() 的第一个参数,则第二个参数将始终被返回。

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

max() 的关系相同,但相反。

<?php
// \n's skipped for brevity
print max(0,NAN);
print
max(NAN,0);
print
min(0,NAN);
print
min(NAN,0);
?>

返回
0
NAN
NAN
0
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
?>
matt at borjawebs dot com
13 年前
返回包含相同最小值的数组键的数组的简化版本(以及可能的应用)

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

// search for array keys with min() value
foreach($player_score_totals as $playerid => $score)
if(
$score == min($player_score_totals)) array_push($min_keys, $playerid);

print_r($min_keys);
?>
nonick AT 8027 DOT org
20 年前
我用 max() 测试了这一点,但我认为它也适用于 min():如果你正在处理数字,那么你可以使用

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

这比以下代码快一些(大约快 16%)

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

我在使用整数和浮点数的几个循环中测试了这一点,迭代次数超过 100 万次。

我正在运行作为 Apache 1.3.27 模块的 PHP 4.3.1。
johnphayes at gmail dot com
18 年前
关于 min() 和 max() 中的布尔参数

(a) 如果你的参数中有一个是布尔值,max 和 min 将把其他参数转换为布尔值以进行比较。
(b) true > false
(c) 然而,max 和 min 将返回赢得比较的实际参数值(而不是转换后的值)。

以下是一些示例用例

1. max(true,100)=true
2. max(true,0)=true
3. max(100,true)=100
4. max(false,100)=100
5. max(100,false)=100
6. min(true,100)=true
7. min(true,0)=0
8. min(100,true)=100
9. min(false,100)=false
10. min(100,false)=false
11. min(true,false)=false
12. max(true,false)=true
alx5000 at walla dot com
19 年前
如果你希望 min 在与字符串比较时返回零 (0),请尝试以下方法

<?php
min
(3,4,";"); // ";"
min(0,min(3,4,";")) // 0
?>
Err
14 年前
当使用包含数字列表的数组的变量时,只需将变量放入 min() 中即可。不要使用整数索引。现在看起来很简单,但我以前不习惯在函数中只放数组的变量。

<?php
$list
= array(9,5,4,6,2,7);
echo
min($list); // 显示 2
?>
browne at bee why you dot ee dee you
20 年前
min() 可用于将值限制在特定值。例如,如果您正在批改试卷,并且有人获得了额外学分,但这些学分不应该计入最终分数

$pts_possible = 50;
$score = 55;

// 如果 $score/$pts_possible 大于 1,则百分比将等于 1
$percent = min($score/$pts_possible,1);
dave at dtracorp dot com
18 年前
空字符串 '' 也将返回 false 或 0,因此如果您有以下内容

$test = array('', 1, 5, 8, 44, 22);

'' 将被返回为最小值

如果您只想获得最小数字,则必须使用旧式的循环

// 默认最小值
$minVal = 100;
foreach ($test as $value) {
if (is_numeric($value) && $value < $minVal) {
$minVal = $value;
}
To Top