Умножить массив на число (PHP)

Операции умножения массива на число в PHP нет, если умножить переменную типа массив на число, появится ошибка Fatal error: Unsupported operand types in ... on line ..

Чтобы умножить массив можно пойти двумя путями.

Первый: использовать функцию array_walk() или array_walk_recursive() для многомерных массивов.

Второй: перебрать все элементы массива при помощи цикла и умножить каждый элемент.

array_walk умножение

Данный способ работает на PHP 5 >= 5.3

Например есть массив $array, который нужно умножить на 5, воспользуемся функцией array_walk().

<?php // Данный массив будет использоваться в примерах как исходный $array = array( 2, 6, array(7, 9, 11), 3, 5, 4 ); // функция array_walk принимает массив по ссылке array_walk( $array, function (&$value) { // проверяем, является ли значение массива числом if (is_numeric($value)) { $value = $value * 5; } } ); print_r($array);

Результат

На экране вы увидите:

Array ( [0] => 10 [1] => 30 [2] => Array ( [0] => 7 [1] => 9 [2] => 11 ) [3] => 15 [4] => 25 [5] => 20 )

Как видите на экране, умножились значения только верхнего уровня, значения вложенных массивов остались без изменений.

array_walk_recursive уномжение

Данный способ работает на PHP 5 >= 5.3

Чтобы умножить все значения многомерного массива на 5, необходимо воспользоваться функцией array_walk_recursive().

В качестве исходных данных, возьмем массив из первого примера.

<?php // функция array_walk_recursive принимает массив по ссылке array_walk_recursive( $array, function (&$value) { // проверяем, является ли значение массива числом if (is_numeric($value)) { $value = $value * 5; } } ); print_r($array);

Результат

На экране вы увидите:

Array ( [0] => 10 [1] => 30 [2] => Array ( [0] => 35 [1] => 45 [2] => 55 ) [3] => 15 [4] => 25 [5] => 20 )

Теперь умножены абсолютно все значения в массиве.

foreach умножение

Второй способ, как упоминалось выше, перебор всех элементов массива в цикле и их умножение.

Возьмем исходный массив из первого примера, и умножим его на 7.

<?php // перебираем все значения, // $value передаем по ссылке foreach ($array as &$value) { // значение является числом? if (is_numeric($value)) { $value = $value * $number; } }

Результат

Array ( [0] => 14 [1] => 42 [2] => Array ( [0] => 7 [1] => 9 [2] => 11 ) [3] => 21 [4] => 35 [5] => 28 )

Как видно, умножились только элементы верхнего уровня. Элементы вложенного массива остались без изменений.

Чтобы умножить абсолютно все элементы массива, при помощи конструкции foreach, необходимо создать функцию и в цикле проверять тип переменной значения $value, и если это массив, то рекурсивно вызвать функцию.

Для частого выполнения операции умножения значений массива, лучше написать функцию.

array_multiply() умножение значений одномерных массивов и array_multiply_recursive().

Функция array_multiply

Функция умножения значений одномерного массива на число. Принимает 2 параметра, массив и число.

<?php /** * @param array $array умножаемый массив * @param $number число на которое умножаются значения массива * @return array */ function array_multiply(array $array, $number) { // array_walk способ функции /*array_walk( $array, function (&$value) use ($number) { if (is_numeric($value)) { $value = $value * $number; } } );*/ // Для умножения одномерных массивов, лучше использовать foreach foreach ($array as &$value) { if (is_numeric($value)) { $value = $value * $number; } } return $array; } // пример использования, умножим массив на 8 $multiplied_array = array_multiply($array, 8); print_r($multiplied_array);

Результат

На экране вы увидите, естественно значения вложенных массивов останутся без изменений.

Array ( [0] => 16 [1] => 48 [2] => Array ( [0] => 7 [1] => 9 [2] => 11 ) [3] => 24 [4] => 40 [5] => 32 )

Функция array_multiply_recursive

А вот для умножения многомерных массивов, как мне кажется, лучше использовать функцию array_walk_recursive().

<?php /** * Рекурсивная функция умножения элементов многомерного массива $array на число $number * @param array $array умножаемый массив * @param $number число на которое умножаются значения массива * @return array */ function array_multiply_recursive(array $array, $number) { array_walk_recursive( $array, function (&$value) use ($number) { if (is_numeric($value)) { $value = $value * $number; } } ); // foreach вариант /*foreach ($array as &$value) { if (is_numeric($value)) { $value = $value * $number; } elseif (is_array($value)) { $value = array_multiply_recursive($value, $number); } }*/ return $array; } // пример использования, умножим значения массива на 13 $multiplied_array = array_multiply_recursive($array, 13);

Результат

Все значения массива умножились на 13.

Array ( [0] => 26 [1] => 78 [2] => Array ( [0] => 91 [1] => 117 [2] => 143 ) [3] => 39 [4] => 65 [5] => 52 )

Категории

ПрограммированиеPHPМассивыМассивы в PHP

Комментарии