[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];//为每个数组成员建立对应关系 } //遍历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                                         )                                  )                          )                  )          )  )

 

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

www.dengb.comtruehttps://www.dengb.com/PHPjc/1395310.htmlTechArticle[PHP]利用PHP的引用生成树的结构, PHP中的引用就是两个变量指向了同一个地方,只要在变量前面增加了符号,它就变成了一个引用 $a =’aaa…

—-想了解更多的php相关异常处理怎么解决关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/phpttorial/103275.html

(0)
上一篇 2020年4月28日
下一篇 2020年4月28日

精彩推荐