猿问

如何将数组关联与 2 个键值相加

我试图在关联数组中用 2 个键条件对值求和,但没有得到任何结果,只是不像预期的那样。


我的阵列:


Array

(

[0] => Array

    (

        [pid] => P1

        [rid] => 1

        [price] => 100

    )


[1] => Array

    (

        [pid] => P1

        [rid] => 1

        [price] => 120

    )


[2] => Array

    (

        [pid] => P1

        [rid] => 1

        [price] => 130

    )


[3] => Array

    (

        [pid] => P2

        [rid] => 1

        [price] => 80

    )


[4] => Array

    (

        [pid] => P2

        [rid] => 1

        [price] => 120

    )


[5] => Array

    (

        [pid] => P2

        [rid] => 2

        [price] => 150

    )

);

我已经尝试了How to GROUP BY 和 SUM PHP Array 中的一些代码 ?或在 PHP 中对数组进行分组


然后代码变成:


$groups = array();

foreach ($array as $item) {

   $key = $item['pid'];

   if (!array_key_exists($key,$groups)) {

      $groups[$key] = array(

         'pid' => $item['pid'],

         'rid'=>$item['rid'],

         'price' => $item['price']

      );

   } else {

   $groups[$key]['price'] += $item['price'];

   }

}

我期望输出数组:


Array

(

[0] => Array

    (

        [pid] => P1

        [rid] => 1

        [price] => 350

    )    


[1] => Array

    (

        [pid] => P2

        [rid] => 1

        [price] => 200

    )


[2] => Array

    (

        [pid] => P2

        [rid] => 2

        [price] => 150

    )

);

我不知道如何用 array_reduce 和 foreach 来解决这个问题,请用其他参考打我或帮我解决这个问题。


牛魔王的故事
浏览 128回答 1
1回答

倚天杖

如果$data是您的输入数组,则可以使用以下代码$r = array();foreach ( $data as $d ) {&nbsp; &nbsp; $key = $d['pid'] . '-' . $d['rid'];&nbsp; &nbsp; if( !isset ( $r[$key] ) ) {&nbsp; &nbsp; &nbsp; &nbsp; $r[$key] = $d;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; $r[$key]['price'] += $d['price'];&nbsp; &nbsp; }}echo '<pre>';print_r($r);die;
随时随地看视频慕课网APP
我要回答