效果
目标二维数组 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;
}