总和(价格)值后,按ID删除数组中相同的ID

时间:2019-05-29 10:54:51

标签: php arrays

我有php订单数组,并且正在将此数组发送给运输服务,但是我的客户有2到3个订单,订单名称相同,shop_id。我要发送第3次运输,这是一个问题,必须只发送1个具有shop_id的运输,并且必须是总价。

我该怎么做?我的数组输出如下。

Array
(
    [date] => 2019-05-23
    [name] => Alex
    [shop_id] => 1
    [price] => 13.45
)

Array
(
    [date] => 2019-05-23
    [name] => Alex
    [shop_id] => 1
    [price] => 22.45
)

Array
(
    [date] => 2019-05-23
    [name] => Alan
    [shop_id] => 3
    [price] => 83.56
)

我的数组代码:

    print("<pre>".print_r($orders,true)."</pre>");

我的数组必须是:

   Array
    (
        [date] => 2019-05-23
        [name] => Alex
        [shop_id] => 1  // LOOK AT SAME shop_id ones in array and
        [price] => 35.90 // do total price them and delete 1 more items.
    )

    Array
    (
        [date] => 2019-05-23
        [name] => Alan
        [shop_id] => 3
        [price] => 83.56
    )

我的代码;

  $newarray = array();
        foreach($arr as $ar)
        {
            foreach($ar as $k => $v)
            {
                if(array_key_exists($v, $newarray))
                    $newarray[$v]['price'] = $newarray[$v]['price'] + $ar['price'];
                else if($k == 'shop_id')
                    $newarray[$v] = $ar;
            }
        }




        print("<pre>".print_r($newarray,true)."</pre>");

输出

Array
(
)

1 个答案:

答案 0 :(得分:0)

您可以构建一个由shop-id索引的结果数组。然后遍历数据数组,并检查该键是否已存在。如果键不存在,则将该项目添加到结果数组。如果该物品存在,请更新价格。

$data = [
    [
        "date"      => "2019-05-23",
        "name"      => "Alex",
        "shop_id"   => 1,
        "price"     => 12.34,
    ],
    [
        "date"      => "2019-05-23",
        "name"      => "Alex",
        "shop_id"   => 2,
        "price"     => 12.34,
    ],
    [
        "date"      => "2019-05-23",
        "name"      => "Alex",
        "shop_id"   => 1,
        "price"     => 23.45,
    ],
];

$result = [];
foreach ($data as $item) {
    $key = 'SHOP-ID-'.$item['shop_id'];
    if (!array_key_exists($key, $result)) {
        $result[$key] = $item;
    } else {
        $result[$key]['price'] += $item['price'];
    }
}

var_dump($result);