@zevem
Стрелец

Как в массиве суммировать количество товара при повторном добавлении?

Есть товары, которые лежат в корзине.

Array
(
    [0] => Array
        (
            [product_id] => 200
            [options] => Array
                (
                    [0] => Array
                        (
                            [quantity] => 1
                            [option_id] => 199
                            [option_value_id] => 500
                        )

                )

        )

    [1] => Array
        (
            [product_id] => 201
            [options] => Array
                (
                    [0] => Array
                        (
                            [quantity] => 1
                            [option_id] => 200
                            [option_value_id] => 501
                        )

                )

        )
 )


Допустим добавляется товар, который уже есть в корзине
[0] => Array
        (
            [product_id] => 201
            [options] => Array
                (
                    [0] => Array
                        (
                            [quantity] => 5
                            [option_id] => 200
                            [option_value_id] => 501
                        )

                )

        )


Мне нужно обновить массив товара, который уже есть в массиве и суммировать количество. На выходе хочу получить так:

Array
(
    [0] => Array
        (
            [product_id] => 200
            [options] => Array
                (
                    [0] => Array
                        (
                            [quantity] => 1
                            [option_id] => 199
                            [option_value_id] => 500
                        )

                )

        )

    [1] => Array
        (
            [product_id] => 201
            [options] => Array
                (
                    [0] => Array
                        (
                            [quantity] => 6
                            [option_id] => 200
                            [option_value_id] => 501
                        )

                )

        )
 )
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 3
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
обычный цикл с проверкой idшников, в чем проблема? (:
Ответ написан
Комментировать
no_one_safe
@no_one_safe
Ответ написан
Комментировать
Тут уже дело вкуса, либо через array_map, либо foreach со ссылкой
$products = [
		[
			'product_id' => 200,
			'options' => [
				[
					'quantity' => 1,
					'option_id' => 199,
					'option_value_id' => 500,
				]
			],
		],
		[
			'product_id' => 201,
			'options' => [
				[
					'quantity' => 1,
					'option_id' => 200,
					'option_value_id' => 501,
				]
			],
		],
	];

	$newProduct = [
		'product_id' => 201,
		'options' => [
			[
				'quantity' => 5,
				'option_id' => 200,
				'option_value_id' => 501,
			]
		],
	];

	$products = array_map(function (array $product) use ($newProduct) {

		if ($product['product_id'] === $newProduct['product_id']) {

			$product['options'][0]['quantity'] += $newProduct['options'][0]['quantity'];
		}

		return $product;
	}, $products);

	var_dump($products);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы