对二维数组进行自定义键平铺

对二维数组进行自定义键平铺

效果

目标二维数组 group_list

[{
	"kkk": 1,
	"vvv": 2,
	"eee": 3,
	"ttt": 4
}, {
	"kkk": 1,
	"vvv": 2,
	"eee": 4,
	"ttt": 4
}, {
	"kkk": 5,
	"vvv": 6,
	"eee": 7,
	"ttt": 8
}, {
	"kkk": 9,
	"vvv": 10,
	"eee": 11,
	"ttt": 12
}]

自定义键顺序 fields

['kkk', 'vvv', 'eee', 'ttt']

最终效果: res

{
	"1": {
		"2": {
			"3": {
				"4": {
					"kkk": 1,
					"vvv": 2,
					"eee": 3,
					"ttt": 4
				}
			},
			"4": {
				"4": {
					"kkk": 1,
					"vvv": 2,
					"eee": 4,
					"ttt": 4
				}
			}
		}
	},
	"5": {
		"6": {
			"7": {
				"8": {
					"kkk": 5,
					"vvv": 6,
					"eee": 7,
					"ttt": 8
				}
			}
		}
	},
	"9": {
		"10": {
			"11": {
				"12": {
					"kkk": 9,
					"vvv": 10,
					"eee": 11,
					"ttt": 12
				}
			}
		}
	}
}

代码

 
 function explodeMultiGroupList3($group_list, $fields)
    {
        $res=[];
        $field_arr = is_string($fields) ? explode(',', $fields) : $fields;
        foreach ($group_list as $key => $value) {
            $temp_cur=[];
            $temp_cur[0]=&$res;
            foreach ($field_arr as $fkey => $field) {
                $cur_key=$value[$field];
                //这个数有这个key
                if (array_key_exists($cur_key,$temp_cur[$fkey])){
                        $temp_cur[$fkey+1]=&$temp_cur[$fkey][$cur_key];
                }else{
                    //没有这key
                    if (!array_key_exists($fkey + 1, $field_arr)) {
                       //最后一个,要赋值了
                        $temp_cur[$fkey][$cur_key] = $value;
                    } else {
                        //不是最后一个
                        $temp_cur[$fkey][$cur_key]=[];
                        $temp_cur[$fkey+1]=&$temp_cur[$fkey][$cur_key];
                    }
                }

            }
        }
        return $res;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值