Как добавить массив повторных значений с добавлением обоих значений - PullRequest
0 голосов
/ 03 июня 2018

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

    Array
(
    [0] => Array
        (
            [order_product_id] => 882
            [order_id] => 814
            [product_id] => 192
            [quantity] => 40
            [price] => 410.0000
            [total] => 16400.0000
            [product_value] => 25
        )

    [1] => Array
        (
            [order_product_id] => 881
            [order_id] => 815
            [product_id] => 200
            [quantity] => 20
            [price] => 1049.0000
            [total] => 20980
            [product_value] => 60
        )

    [2] => Array
        (
            [order_product_id] => 882
            [order_id] => 815
            [product_id] => 192
            [quantity] => 10
            [price] => 410.0000
            [total] => 4100.0000
            [product_value] => 25
        )

)

Итак, я хочу массиввот так

Array
(
    [0] => Array
        (
            [order_product_id] => 882
            [order_id] => 814
            [product_id] => 192
            [quantity] => 60
            [price] => 410.0000
            [total] => 24600.0000
            [product_value] => 25
        )

    [1] => Array
        (
            [order_product_id] => 881
            [order_id] => 815
            [product_id] => 200
            [quantity] => 20
            [price] => 1049.0000
            [total] => 20980
            [product_value] => 60
        )   
)

Я попробовал подобный код условия, но он не сработал должным образом

    foreach ($product as $key => $products) 
            {

                foreach ($product as $keys => $row) 
                {

                    if ($products['product_id']==$row['product_id']) 
                    {

                    }
                    else
                    {

                    }
                }
           }

поэтому кто-нибудь, пожалуйста, помогите мне разобраться, пожалуйста

1 Ответ

0 голосов
/ 03 июня 2018

Это должно хорошо работать.По сути, мы даем каждому массиву ключ на основе идентификатора в новом массиве, и на каждой итерации мы проверяем, сделали ли мы уже предыдущий, и если да, то добавляем цену и количество:

$array = array(

    0 => array(
        'order_product_id' => 882,
        'quantity' => 40,
        'price' => 410
    ),
    1 => array(
        'order_product_id' => 881,
        'quantity' => 20,
        'price' => 1049
    ),
    2 => array(
        'order_product_id' => 882,
        'quantity' => 10,
        'price' => 410
    )

);


$mod_arr = array();

foreach ($array as $item) {
    $id = $item['order_product_id'];
    // we've already created this item? yes: add together current item price and quantity with previous
    if (isset($mod_arr[$id])) {
        $mod_arr[$id]['quantity'] = $mod_arr[$id]['quantity'] + $item['quantity'];
        $mod_arr[$id]['price'] = $mod_arr[$id]['price'] + $item['price'];
        continue;
    }
    $mod_arr[$id] = $item;
}

echo '<pre>';
print_r($mod_arr);

Генерирует:

Array
(
    [882] => Array
        (
            [order_product_id] => 882
            [quantity] => 50
            [price] => 820
        )

    [881] => Array
        (
            [order_product_id] => 881
            [quantity] => 20
            [price] => 1049
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...