Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
642 views
in Technique[技术] by (71.8m points)

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);

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...