public function tt(){ $param = array( array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70-FB7F-47AE-8356-777777777777', 'totalamount' => '0', 'offsetamount' => '90.0', 'postamount' => '0', 'hysyamout' => '10.0', 'protypeid' => '1', ), array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70-FB7F-47AE-8356-777777777777', 'totalamount' => '0', // 需要支付的钱 'offsetamount' => '5.0', // 抵扣分类1下5.0份; 'postamount' => '0', // 运费 'hysyamout' => '5.0', 'protypeid' => '1', ), array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70-FB7F-47AE-8356-777777777777', 'totalamount' => '0', // 需要支付的钱 'offsetamount' => '5.0', // 抵扣分类1下5.0份; 'postamount' => '0', // 运费 'hysyamout' => '5.0', 'protypeid' => '7', ), array ( 'hykno' => '2222222-CB', 'tcdk_fid' => '458B6D70-FB7F-47AE-8356-777777777777', 'totalamount' => '0', // 需要支付的钱 'offsetamount' => '5.0', // 抵扣分类1下5.0份; 'postamount' => '0', // 运费 'hysyamout' => '5.0', 'protypeid' => '3', ) ); $this->merger_by_one($param,'protypeid',['totalamount','offsetamount','postamount','hysyamout']); } /*** * @param $param 需要处理统一格式的数组 * @param $one_str 根据某个字段合并 * @param $plus_arr 需要求和的字段列表数组 */ public function merger_by_one($param,$one_str,$plus_arr){ $u = array(); foreach ($param as $k => $v){ if (!in_array($v[$one_str],$u)){ $u[] = $v[$one_str]; } } $data = array(); foreach ($u as $uk => $uv) { foreach ($param as $pk => $pv) { $all_keys = array_keys($pv); if ($pv[$one_str] == $uv) { foreach ($all_keys as $key_val) { if (in_array($key_val,$plus_arr)){ $data[$uv][$key_val] += $pv[$key_val]; } else { $data[$uv][$key_val] = $pv[$key_val]; } } } } } $data = array_values($data); dump($data); }