H5W3
当前位置:H5W3 > 其他技术问题 > 正文

php递归里面使用静态变量保存数组,是不是不能生成树形结构?

代码如下:

$arr = array(
array('id'=>1,'name'=>'名称1','pid'=>0,'cid'=>2),
array('id'=>2,'name'=>'名称2','pid'=>0),
array('id'=>3,'name'=>'名称3','pid'=>0),
array('id'=>4,'name'=>'名称4','pid'=>0),
array('id'=>5,'name'=>'名称5','pid'=>0),
array('id'=>6,'name'=>'名称1-1','pid'=>1),
array('id'=>7,'name'=>'名称1-2','pid'=>1),
array('id'=>8,'name'=>'名称2-1','pid'=>2),
array('id'=>9,'name'=>'名称2-2','pid'=>2),
array('id'=>10,'name'=>'名称3-1','pid'=>3),
array('id'=>11,'name'=>'名称1-1-1','pid'=>6),
array('id'=>12,'name'=>'名称1-1-2','pid'=>6),
array('id'=>13,'name'=>'名称1-2-1','pid'=>7),
array('id'=>14,'name'=>'名称2-1-1','pid'=>8),
array('id'=>15,'name'=>'名称2-1-2','pid'=>8),
array('id'=>16,'name'=>'名称2-2-1','pid'=>9),
array('id'=>17,'name'=>'名称2-1-1-1','pid'=>14),
array('id'=>18,'name'=>'名称2-1-2-1','pid'=>15),
array('id'=>19,'name'=>'名称2-1-1-1-1','pid'=>17),
array('id'=>20,'name'=>'名称3-1-1','pid'=>10),
);
function getChildtree($data,$pid = 0,$level = 0){
static  $result;
foreach ($data as $key => $info){
if($info['pid'] == $pid){
$info['level'] = $level;
$info['child'] = $info;
$result[] = $info;
unset($data[$key]);
getChildtree($data,$info['id'],$level+1);
}
}
return $result;
}

调用:

    $childtree = $this->getChildtree($arr);
print_r($childtree);

这样不能处理成树形结构的,用静态变量怎么处理成树形结构的?

回答

不要使用静态变量来弄,这样的代码看着就像是刚刚学程序的人写的。思路应该是一层一层的。比如第一级$a[]=$one; 再使用引用的手段,把$one下面的赋值给他 $one[]=$two;这种应该你能很容易明白。当然 还可以使用其他手段。 这个算法其实也是有很多选择的,最差的O(n^2)复杂度。

本文地址:H5W3 » php递归里面使用静态变量保存数组,是不是不能生成树形结构?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址