分享一个树形结构数组生成函数,只循环一次

浏览:1678 发布日期:2016/05/21 分类:技术分享
首先,非递归……
原始数组: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;
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>