PHP二维数组相同数据格式做合并,并根据数值字段做排序操作

本文介绍了一种将两个二维数组按特定字段进行合并并排序的方法。通过PHP代码实现了数组的合并,同时根据月份字段对合并后的数组进行了排序,便于进一步的数据处理。
  /**
     * 二维数组相同数据格式做合并,并根据字段做排序操作
     *  打印,$json_arr1  OR $json_arr2 ,看数据结构
     * @return array
     */

     $json_1 = '[{"months":"2017\u5e7407\u6708\u8d26\u5355","t_months":"2017-07","moneys":"1539.43","balances":"Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y"},{"months":"2017\u5e7408\u6708\u8d26\u5355","t_months":"2017-08","moneys":"598.00","balances":"Y,Y"},{"months":"2017\u5e7411\u6708\u8d26\u5355","t_months":"2017-11","moneys":"62.74","balances":"Y"}]';
        $json_2 = '[{"months":"2017\u5e7408\u6708\u8d26\u5355","t_months":"2017-08","moneys2":"23473.09","balances":"N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N"},{"months":"2017\u5e7409\u6708\u8d26\u5355","t_months":"2017-09","moneys2":"8614.42","balances":"N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N"},{"months":"2017\u5e7410\u6708\u8d26\u5355","t_months":"2017-10","moneys2":"8455.06","balances":"N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N"},{"months":"2017\u5e7411\u6708\u8d26\u5355","t_months":"2017-11","moneys2":"86.85","balances":"N,N"}]';

        $json_arr1 = json_decode($json_1, true);
        $json_arr2 = json_decode($json_2, true);

        $data_1 = [];
        $data_2 = [];

        //todo : 数量小的months做key
        $replace_data = count($json_arr1) < count($json_arr2) ? $json_arr1 : $json_arr2;
        foreach ($replace_data as $k=>$a) {
            $data_1[$a['months']] = $a;
        }
        //todo: 数组合并,并根据根据key循环做存已存在和未存,数据重组操作
        foreach (array_merge($json_arr1,$json_arr2) as $ks => $b) {
            unset($b['balances']);
            $data_2[$b['months']]  = $b;
            isset($data_1[$b['months']]) and $data_2[$b['months']] = [
                'months'  => $b['months'],
                't_months'=> $b['t_months'],
                'moneys'  => !empty($data_1[$b['months']]['moneys']) ? $data_1[$b['months']]['moneys'] : 0,
                'moneys2' => !empty($b['moneys2']) ? $b['moneys2'] : 0,
            ];
        }

        //todo: 二维数组根据某个字段做排序操作(只限制数值)
        $data_arr = array_values($data_2);
        $arr_sort = [];
        foreach($data_arr as $kr => $value){
            foreach($value as $k=>$v){
                $arr_sort[$k][$kr] = $v;
            }
        }
        array_multisort($arr_sort['t_months'], SORT_ASC, $data_arr);
        print_r($data_arr);

 

转载于:https://www.cnblogs.com/LoveProgram/articles/9483383.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值