@kolomat

Как объединить массивы со сложением значений ключей?

Добрый вечер, подскажите по такому вопросу.
Есть массив вида
Array
(

    [3] => Array
        (
            [order_id] => 4
            [firstname] => Василий
            [telephone] => +38(066)385-45-22
            [shipping_address_1] => отделение 55
            [shipping_city] => Жмеринка
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 5300.0000
            [name] => Гранитная мойка Valetti mod18 775х500 Серый
            [quantity] => 2
            [price] => 2650.0000
        )

    [4] => Array
        (
            [order_id] => 4
            [firstname] => Василий
            [telephone] => +38(066)385-45-22
            [shipping_address_1] => отделение 55
            [shipping_city] => Жмеринка
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 2890.0000
            [name] => Гранитная мойка Valetti mod14 655х500 Черный
            [quantity] => 1
            [price] => 2890.0000
        )

)


Есть значение ключа order_id, которое одинаково. Вопрос, можно ли как то их склеить и привести в формат такого плана
[4] => Array
        (
            [order_id] => 4
            [firstname] => Василий
            [telephone] => +38(066)385-45-22
            [shipping_address_1] => отделение 55
            [shipping_city] => Жмеринка
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 5540 (общая сума массива total из массива А + массива B)
            [name] => Гранитная мойка Valetti mod14 655х500 Черный *** Гранитная мойка Valetti mod18 775х500 Серый
            [quantity] => 3 (общая сума массива quantity из массива А + массива B )
        )
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
@kolomat Автор вопроса
Таки немного не так(( При добавлении еще нескольких массивов, но с разными ключами получаем такой результат
(
    [order_id] => 4
    [firstname] => Василий
    [telephone] => +38(066)385-45-22
    [shipping_address_1] => отделение 55
    [shipping_city] => Жмеринка
    [shipping_method] => Фиксированная стоимость доставки
    [total] => 12550
    [name] => Гранитная мойка Valetti mod1 440х430 std Старый камень *** Гранитная мойка Valetti mod1 440х430 std Терра *** Гранитная мойка Valetti mod1 440х430 Серый *** Гранитная мойка Valetti mod18 775х500 Серый *** Гранитная мойка Valetti mod14 655х500 Черный
    [quantity] => 6
)

Тоесть массив merged можно склеить уже с основным, но почему добаляются в [name] элементы из массивов с другим ключем?
PS
Исходные данные
[1] => Array
        (
            [order_id] => 2
            [firstname] => Ирина
            [telephone] => +38(063)456-88-12
            [shipping_address_1] => отдление 1
            [shipping_city] => Киев
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 1255.0000
            [name] => Гранитная мойка Valetti mod1 440х430 std Терра
            [quantity] => 1
        )

    [2] => Array
        (
            [order_id] => 3
            [firstname] => Павел
            [telephone] => +38(099)562-45-78
            [shipping_address_1] => отдление 35
            [shipping_city] => Львов
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 1850.0000
            [name] => Гранитная мойка Valetti mod1 440х430 Серый
            [quantity] => 1
        )

    [3] => Array
        (
            [order_id] => 4
            [firstname] => Василий
            [telephone] => +38(066)385-45-22
            [shipping_address_1] => отделение 55
            [shipping_city] => Жмеринка
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 5300.0000
            [name] => Гранитная мойка Valetti mod18 775х500 Серый
            [quantity] => 2
        )

    [4] => Array
        (
            [order_id] => 4
            [firstname] => Василий
            [telephone] => +38(066)385-45-22
            [shipping_address_1] => отделение 55
            [shipping_city] => Жмеринка
            [shipping_method] => Фиксированная стоимость доставки
            [total] => 2890.0000
            [name] => Гранитная мойка Valetti mod14 655х500 Черный
            [quantity] => 1
        )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kspitfire
@kspitfire
Webdev: PHP (Symfony, Laravel), JS (Vue.js), Go.
Набросал, вроде то, что вам нужно:
$merged = [];

foreach ($orders as $order) {
	foreach ($order as $key => $item) {
		switch ($key) {
			case 'quantity':
			case 'total':
				$merged[$key] = (false === isset($merged[$key])) ? $item : $merged[$key] + $item;
				break;
			case 'name':
				$merged[$key] = (false === isset($merged[$key])) ? $item : $merged[$key] . " *** " . $item;
				break;
			case 'price':
				break;
			default:
				$merged[$key] = $item;
				break;
		}
	}
}


Пример с вашими массивами:
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы