<?php $data=array( array("id"=>2,"pid"=>1), array("id"=>3,"pid"=>1), array("id"=>4,"pid"=>2), array("id"=>5,"pid"=>2), array("id"=>6,"pid"=>3), array("id"=>7,"pid"=>3), array("id"=>1,"pid"=>0), ); $refer=array();//存储主键与数组单元的引用关系 //遍历 foreach($data as $k=>$v){ $refer[$v['id']]=&$data[$k];//为每个数组成员建立对应关系 } //遍历2 foreach($data as $k=>$v){ $parent=&$refer[$v['pid']];//获取父分类的引用 $parent['child'][]=&$data[$k];//在父分类的children中再添加一个引用成员 } print_r($data); //利用了一个$refer数组,时间复杂度是O(n) , 只需要单层循环,直接通过引用修改$data原数据,生成一个树状结构 Array ( [0] => Array ( [id] => 2 [pid] => 1 [child] => Array ( [0] => Array ( [id] => 4 [pid] => 2 ) [1] => Array ( [id] => 5 [pid] => 2 ) ) ) [1] => Array ( [id] => 3 [pid] => 1 [child] => Array ( [0] => Array ( [id] => 6 [pid] => 3 ) [1] => Array ( [id] => 7 [pid] => 3 ) ) ) [2] => Array ( [id] => 4 [pid] => 2 ) [3] => Array ( [id] => 5 [pid] => 2 ) [4] => Array ( [id] => 6 [pid] => 3 ) [5] => Array ( [id] => 7 [pid] => 3 ) [6] => Array ( [id] => 1 [pid] => 0 [child] => Array ( [0] => Array ( [id] => 2 [pid] => 1 [child] => Array ( [0] => Array ( [id] => 4 [pid] => 2 ) [1] => Array ( [id] => 5 [pid] => 2 ) ) ) [1] => Array ( [id] => 3 [pid] => 1 [child] => Array ( [0] => Array ( [id] => 6 [pid] => 3 ) [1] => Array ( [id] => 7 [pid] => 3 ) ) ) ) ) )