PHP 8.4.1 Released!

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 = max(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

// Сравнение с другими значениями произойдёт по правилу FALSE < TRUE и NULL == FALSE,
// если какой-либо аргумент равен NULL или логическому значению,
// независимо от типа аргументов
// В следующем примере -10 и 10 трактуется как TRUE
$val = min(-10, FALSE, 10); // FALSE
$val = min(-10, NULL, 10); // NULL

// Значение 0 трактуется как FALSE, поэтому 0 «меньше» TRUE
$val = min(0, TRUE); // 0

?>

Смотрите также

  • max() - Возвращает наибольшее значение
  • count() - Подсчитывает количество элементов в массиве или в объекте Countable

Добавить

Примечания пользователей 12 notes

up
5
volch5 at gmail dot com
10 years ago
min() (and max()) on DateTime objects compares them like dates (with timezone info) and returns DateTime object.
<?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
?>

It works at least 5.3.3-7+squeeze17
up
2
Anonymous
18 years ago
NEVER EVER use this function with boolean variables !!!
Or you'll get something like this: min(true, 1, -2) == true;

Just because of:
min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

You are warned !
up
-1
harmor
16 years ago
A way to bound a integer between two values is:

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

which is the same as:

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

So if you wanted to bound an integer between 1 and 12 for example:

Input:
$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 />';

Output:
1
1
6
12
12
up
-2
steffen at morkland dot com
18 years ago
> NEVER EVER use this function with boolean variables !!!
> Or you'll get something like this: min(true, 1, -2) == true;

> Just because of:
> min(true, 1, -2) == min(min(true,1), -2) == min(true, -2) == true;

It is possible to use it with booleans, there is is just one thing, which you need to keep in mind, when evaluating using the non strict comparison (==) anyting that is not bool false, 0 or NULL is consideret true eg.:
(5 == true) = true;
(0 == true) = false;
true is also actually anything else then 0, false and null. However when true is converted to a string or interger true == 1, therefore when sorting true = 1. But if true is the maximum number bool true is returned. so to be sure, if you only want to match if true is the max number remember to use the strict comparison operater ===
up
-4
Teelevision
11 years ago
A function that returns the lowest integer that is not 0.
<?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)));
}
?>
up
-4
DO
16 years ago
I've modified the bugfree min-version to ignore NULL values (else it returns 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 years ago
Be very careful when your array contains both strings and numbers. This code works strange (even though explainable) way:
var_dump(max('25.1.1', '222', '99'));
var_dump(max('2.1.1', '222', '99'));
up
-4
hava82 at gmail dot com
13 years ago
Here is function can find min by array key

<?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 years ago
A condensed version (and possible application) of returning an array of array keys containing the same minimum value:

<?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);
?>
up
-5
php at keith tyler dot com
13 years ago
If NAN is the first argument to min(), the second argument will always be returned.

If NAN is the second argument, NAN will always be returned.

The relationship is the same but inverted for max().

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

Returns:
0
NAN
NAN
0
up
-5
8ilO
7 years ago
A min_by function:
<?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 years ago
I tested this with max(), but I suppose it applies to min() too: If you are working with numbers, then you can use:

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

which is somewhat faster (roughly 16%) than

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

I tested this on several loops using integers and floats, over 1 million iterations.

I'm running PHP 4.3.1 as a module for Apache 1.3.27.
To Top