千家信息网

PHP中怎么引用生成树结构

发表于:2024-11-15 作者:千家信息网编辑
千家信息网最后更新 2024年11月15日,PHP中怎么引用生成树结构,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP中的引用就是两个变量指向了同一个地方,只要
千家信息网最后更新 2024年11月15日PHP中怎么引用生成树结构

PHP中怎么引用生成树结构,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

PHP中的引用就是两个变量指向了同一个地方,只要在变量前面增加了&符号,它就变成了一个引用

$a='aaa';$b=&$a;$c=&$b;xdebug_debug_zval('a','b','c');

输出结果是:

a: (refcount=3, is_ref=1)='aaa'b: (refcount=3, is_ref=1)='aaa'c: (refcount=3, is_ref=1)='aaa'

"aaa"有了三个引用 , 并且是is_ref是引用类型,那也就意味着不管是我修改$b ,还是修改$c , "aaa"这个都会被改变

可以根据上面这个原理来把一个数据库存储的带pid的逐行数据,变成一个多层级的树状结构

$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];//为每个数组成员建立对应关系}//遍历2foreach($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                                        )                                )                        )                )        ))
$a='aaa';$b=&$a;$c=&$b;xdebug_debug_zval('a','b','c');

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

0