PHP array_product(): умножение всех элементов массива
Узнайте, как PHP array_product() перемножает все значения массива в одно число, как функция работает с float, пустыми массивами и строками.
Функция PHP array_product() перемножает все значения массива и возвращает единственное результирующее число. Она является мультипликативным аналогом array_sum(): там где array_sum() складывает элементы, array_product() их перемножает. Используйте её всякий раз, когда нужно получить накопленное произведение — например, итог цена × количество, совокупный коэффициент нескольких процентных ставок или факториал.
Что рассматривается на этой странице
- Сигнатура функции и тип возвращаемого значения
- Базовый пример и порядок формирования результата
- Поведение с float, пустыми массивами и ключами массива
- Подводный камень при работе со строками (изменения в PHP 8)
- Практический пример «итог строки корзины» и ссылки на связанные функции
Синтаксис
array_product(array $array): int|floatarray_product() принимает единственный аргумент — массив для перемножения — и возвращает либо int, либо float. Тип возвращаемого значения зависит от значений: если все элементы являются целыми числами, возвращается int; если хотя бы один элемент — float, возвращается float.
Базовый пример
Передайте массив чисел, и array_product() вернёт их произведение. Внутренне функция начинает с 1 (нейтрального элемента умножения) и последовательно умножает каждый элемент на текущий итог: 1 × 1 × 2 × 3 × 4 × 5 = 120.
Вывод:
120Работа с float
Если хотя бы один элемент является float, результат тоже будет float. Это делает array_product() удобной для таких задач, как одновременное применение нескольких коэффициентов.
<?php
$factors = [1.5, 2, 4];
echo array_product($factors); // 1.5 * 2 * 4
?>Вывод:
12Примечание: арифметика с плавающей точкой неточна. Для денежных расчётов предпочтительнее использовать целые числа (центы) или библиотеку точной арифметики, такую как BCMath, а не прямое перемножение float.
Пустой массив возвращает 1
Частая неожиданность: пустой массив возвращает 1, а не 0. Это математически корректное пустое произведение — перемножение «ничего» оставляет нейтральный элемент 1 нетронутым, точно так же как сумма пустого набора равна 0.
<?php
echo array_product([]); // 1
?>Вывод:
1Ловушка: нечисловые строки
array_product() ожидает числовые значения. Числовые строки вроде "2" автоматически преобразуются в числа, поэтому ["1", "2", "3"] перемножается в 6. Но нечисловая строка вроде "Q" не поддаётся преобразованию — и поведение изменилось в разных версиях PHP:
- PHP 8.0+ вызывает ошибку
TypeError/предупреждение ("Multiplication is not supported on type string") и считает значение равным0, так что произведение становится0. - PHP 7 и более ранние молча обрабатывали нечисловые строки как
0, также давая0.
В любом случае конечное произведение обнуляется, поэтому проверяйте или фильтруйте входные данные, если они могут содержать нечисловые строки.
Вывод:
0Ключи игнорируются
array_product() перемножает только значения — ключи, числовые или строковые, не участвуют в вычислении. Это означает, что функция работает одинаково с ассоциативным массивом и с индексированным.
<?php
$cart = ['price' => 9.99, 'qty' => 3];
echo array_product($cart); // 9.99 * 3 = 29.97
?>Вывод:
29.97Практический пример: итог строки корзины
Типичное применение — объединение нескольких связанных чисел в одну величину. Здесь array_product() в одном вызове превращает цену за единицу, количество и коэффициент скидки в итоговую сумму строки.
<?php
$unitPrice = 20;
$quantity = 3;
$discount = 0.9; // 10% off
$lineTotal = array_product([$unitPrice, $quantity, $discount]);
echo $lineTotal; // 20 * 3 * 0.9
?>Вывод:
54Связанные функции
array_sum()— складывает элементы вместо их перемножения.array_reduce()— свёртывает array с любой пользовательской операцией, когда нужно больше, чем простое произведение.array_map()— преобразует значения (например, извлекает одно поле) перед перемножением.array_filter()— отфильтровывает нежелательные элементы перед передачей массива.
Для краткого ознакомления с массивами см. PHP Arrays.
Подведём итог
array_product() — это быстрый и читаемый способ перемножить все значения массива в одно число. Запомните три особенности, которые часто удивляют: тип возвращаемого значения становится float, как только один элемент является float; пустой массив возвращает 1; нечисловые строки обнуляют весь результат. Учитывайте это — и функция станет надёжным инструментом для накопленных произведений.