Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


Умножить массив на число (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().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

// Данный массив будет использоваться в примерах как исходный
$array = array(
    
2,
    
6,
    array(
7911),
    
3,
    
5,
    
4
);

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

print_r($array);

Результат

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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().

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

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

print_r($array);

Результат

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => 10
    [1] => 30
    [2] => Array
        (
            [0] => 35
            [1] => 45
            [2] => 55
        )

    [3] => 15
    [4] => 25
    [5] => 20
)

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

foreach умножение

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

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

1
2
3
4
5
6
7
8
9
<?php
// перебираем все значения,
// $value передаем по ссылке
foreach ($array as &$value) {
    
// значение является числом?
    
if (is_numeric($value)) {
        
$value $value $number;
    }
}

Результат

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 параметра, массив и число.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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($array8);

print_r($multiplied_array);

Результат

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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($array13);

Результат

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => 26
    [1] => 78
    [2] => Array
        (
            [0] => 91
            [1] => 117
            [2] => 143
        )

    [3] => 39
    [4] => 65
    [5] => 52
)
Опубликовано: 18 ноября 2013  ·  Автор: Артём Фёдоров  ·  4894 просмотра

Категория

ГлавнаяПрограммированиеPHPМассивыУмножить массив на число (PHP)

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

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

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания