max()
Функция max() в PHP возвращает наибольшее значение из массива или набора аргументов. Синтаксис, сравнение типов и примеры.
Функция PHP max() возвращает наибольшее значение из списка аргументов или из одного массива. Это один из самых удобных способов найти максимум без написания цикла вручную. В этой главе рассматриваются оба стиля вызова, правила сравнения значений разных типов, граничные случаи, с которыми легко ошибиться, и ситуации, когда стоит использовать max() или альтернативу.
Синтаксис
max() принимает два различных варианта вызова:
// Form 1: two or more values
max(mixed $value1, mixed $value2, mixed ...$values): mixed
// Form 2: a single array
max(array $value_array): mixedВ обоих вариантах тип возвращаемого значения совпадает с типом значения, которое «побеждает» в сравнении — передайте целые числа и получите целое число, передайте строки и получите строку.
Поиск наибольшего значения в массиве
Если передать один массив, max() вернёт его наибольший элемент:
Это работает и для ассоциативных массивов. Ключи игнорируются; сравниваются только значения, и возвращается значение (не ключ):
<?php
$prices = ["apple" => 1.20, "pear" => 0.95, "mango" => 2.40];
echo max($prices); // 2.4
?>Сравнение набора значений
Если у вас уже есть отдельные переменные, передайте их напрямую, не создавая массив. Этот вариант принимает любое количество аргументов:
<?php
echo max(10, 42, 7); // 42
echo "\n";
echo max(3, 9, 9, 1); // 9 — ties simply return the value
?>Это удобно для ограничения числа снизу — распространённый приём в пагинации и обработке форм:
<?php
$requestedPage = -3;
// Never let the page number drop below 1
$page = max(1, $requestedPage);
echo $page; // 1
?>Как max() сравнивает значения
max() использует стандартные правила сравнения PHP, поэтому результат зависит от типов участвующих значений.
- Числа сравниваются численно:
max(2, 10)равно10. - Строки сравниваются лексикографически (с учётом регистра — заглавные буквы сортируются перед строчными):
max("apple", "banana", "cherry")возвращает"cherry". - Смешанные строки и числа: нечисловая строка считается большей, чем
0в PHP 8, поэтомуmax(0, "hello")возвращает"hello". По возможности избегайте смешения типов — правила легко неправильно понять. - Массивы сравниваются сначала по длине, затем поэлементно, и массив всегда считается больше скалярного значения.
<?php
// Arrays of equal length: compared element by element
var_dump(max([1, 5], [2, 1]));
// Returns [2, 1] because the first element 2 > 1
?>Граничные случаи и подводные камни
- Пустой массив:
max([])выбрасываетValueErrorв PHP 8 (в PHP 7 выдавалось предупреждение и возвращалсяfalse). Проверяйте входные данные на пустоту перед вызовом. - Один не-массивный аргумент недопустим —
max(5)вызывает ошибку. Используйтеmax(5, $other)илиmax([5]). - Значения
NANделают результат ненадёжным; предварительно отфильтруйте их. - При равных значениях возвращается первое встреченное, поэтому результат стабилен, но исходный ключ теряется.
Связанные функции
min()— зеркальная функция, возвращает наименьшее значение.sort()— сортирует весь массив, когда нужно упорядочить все элементы, а не только крайнее значение.array_sum()— суммирует все элементы массива.count()— подсчитывает элементы; полезно для защитыmax()от пустых массивов.
Заключение
max() — это краткий и понятный способ получить наибольшее значение из набора аргументов или массива, а также удобный способ ограничить число снизу (max(1, $n)). Следите за единообразием типов, защищайтесь от пустых массивов в PHP 8 и используйте min(), когда нужен противоположный конец диапазона.