原始数组:
array(3) {
[0] => array(8) {
["wmid"] => int(1)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(0)
["wmname"] => string(4) "test"
["wmtype"] => int(0)
["wminfo"] => string(6) "ffffff"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
}
[1] => array(8) {
["wmid"] => int(2)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(1)
["wmname"] => string(5) "test1"
["wmtype"] => int(0)
["wminfo"] => string(6) "222222"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
}
[2] => array(8) {
["wmid"] => int(3)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(1)
["wmname"] => string(5) "test2"
["wmtype"] => int(0)
["wminfo"] => string(5) "fffff"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
}
}需要实现如下效果:array(1) {
[1] => array(9) {
["wmid"] => int(1)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(0)
["wmname"] => string(4) "test"
["wmtype"] => int(0)
["wminfo"] => string(6) "ffffff"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
["wmsub"] => array(2) {
[0] => array(8) {
["wmid"] => int(2)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(1)
["wmname"] => string(5) "test1"
["wmtype"] => int(0)
["wminfo"] => string(6) "222222"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
}
[1] => array(8) {
["wmid"] => int(3)
["wmsign"] => string(32) "49474064UhJOixrJMIdkGdyLrnKqwXH8"
["wmpid"] => int(1)
["wmname"] => string(5) "test2"
["wmtype"] => int(0)
["wminfo"] => string(5) "fffff"
["wmsort"] => int(1000)
["wmstatus"] => int(1)
}
}
}
}接下来是具体的函数了,希望给予点评。/*
* @param $srcData 需要进行处理的数组,处理前必须已经按照pid排序
* @param $id 数组的id字段名,你可以定义成你自己的id名称
* @param $pid 数组的pid字段名,关联上级的id,你可以改成自己的pid名
* @param $sub 保存下级数组的键名,你可以自己改
* @return 返回排序好后的数组
/
function rankSort(&$srcData,$id='id',$pid='pid',$sub='sub'){
$data=[];
$list=[];
foreach($srcData as $key=>$value){
if($value[$pid]==0){
//顶级菜单
$data[$value[$id]]=$value;
$list[$value[$id]]=&$data[$value[$id]];
}else{
$list[$value[$pid]][$sub][]=$value;
$list[$value[$id]]=&$list[$value[$pid]][$sub][count($list[$value[$pid]][$sub])-1];
}
}
return $data;
} 最佳答案