merger_by_one 处理二维数组,根据里面某字段合并, 里面有的保留,有的求和~~

    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);
    }
原文地址:https://www.cnblogs.com/pansidong/p/10133968.html