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),
)
)
展开
 我来答
fraaaaa
推荐于2016-11-24 · TA获得超过166个赞
知道答主
回答量:48
采纳率:100%
帮助的人:65.9万
展开全部

你的结果写错了把?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!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式