php 递归重组数组结构
二维数组结构关联关系pid(父类'id')array(0=>array("id"=>"1",'pid'=>0)1=>array("id"=>"2",'pid'=>1)2=...
二维数组结构 关联关系pid(父类'id')
array(
0=>array("id"=>"1",'pid'=>0)
1=>array("id"=>"2",'pid'=>1)
2=>array("id"=>"3",'pid'=>1)
3=>array("id"=>"4",'pid'=>2)
)
如何得到
array(
0=>array("id"=>"1",'pid'=>0,'sub'=>
array(
array("id"=>"3",'pid'=>1,'sub'=>
array("id"=>"4",'pid'=>2),
),
array("id"=>"4",'pid'=>2),
)
) 展开
array(
0=>array("id"=>"1",'pid'=>0)
1=>array("id"=>"2",'pid'=>1)
2=>array("id"=>"3",'pid'=>1)
3=>array("id"=>"4",'pid'=>2)
)
如何得到
array(
0=>array("id"=>"1",'pid'=>0,'sub'=>
array(
array("id"=>"3",'pid'=>1,'sub'=>
array("id"=>"4",'pid'=>2),
),
array("id"=>"4",'pid'=>2),
)
) 展开
展开全部
你的结果写错了把?id=4,pid=2的怎么可能在id=1的目录下!给你写一个把!
<?php
function merge($array,$pid=0){
$last=array();
foreach($array as $k=>$v){
if($v['pid']==$pid){
$v['sub']=merge($array,$v['id']);
$last[]=$v;
}
}
return $last;
}
$node=array(
0=>array("id"=>"1",'pid'=>0),
1=>array("id"=>"2",'pid'=>1),
2=>array("id"=>"3",'pid'=>1),
3=>array("id"=>"4",'pid'=>2)
);
var_dump(merge($node));
追问
感谢你的答案,我还有个问题
首先 你是怎样确定$v['pid']==$pid这个关联条件的,根据是什么。
当我下次再遇到类似的问题,或是在使用递归的时候,我改遵从什么样的原则。
追答
这个具体依据什么不好说,递归本来就很抽象!首先你要记住递归都是从最底层到最高层(拿你这例子来说,递归肯定是从最小的子元素开始一层一层到顶级元素),记住这一条然后把你要递归的数组留下2-3级,这样在草图上可以划一下你的递归函数运行流程!至于条件,因为你是要分级,那肯定是子元素的父级id等于父元素的id,所以从上面原则上很容易写出,从最低级元素的pid开始循环了,就是说我从pid=2的开始找,然后pid=1 pid=0!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询