利用PHP的引用生成树的结构
2020-08-16 04:31
1681 查看
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');
相关文章推荐
- 利用PHP生成MySQL数据库表结构信息
- 利用php的GD库生成验证码
- 利用PHP动态生成VRML网页
- 利用excel生成pdm表结构
- 二叉树1:广义表形式生成二叉链表形式,利用队列输出层次结构
- ssm 自定义注解实现mybatis自动维护表结构以及利用freemarker生成代码
- 利用php生成xml
- 利用栈结构生成后缀表达式
- PHP利用qrcorde生成二维码详解
- PHP代码根据数据表结构自动生成数据录入页面
- 利用JDBC根据表结构生成ModelClass
- 分享一个牛逼的PHP无限极分类生成树方法,巧用引用
- [转]netbean下利用apigen生成php文档安装配置
- 利用PHP生成静态HTML文档的原理
- [ActionScript 3.0] AS利用ByteArray向PHP发送二进制数据生成图片
- 利用PHP的ob函数实现生成静态化页面
- 利用栈结构生成后缀表达式
- 利用VS“生成方法存根”—放空层次调用 专注写代码结构
- php利用GD库生成缩略图
- PHP 【利用二维码生成库 PHP QR Code 生成二维码】