请问如何把$a转换成$b?
$a = [
[
'id' => 1,
'pid' => 0,
],
[
'id' => 2,
'pid' => 0,
], [
'id' => 3,
'pid' => 1,
], [
'id' => 4,
'pid' => 3,
], [
'id' => 5,
'pid' => 4,
],
];
$b = [
[
'id' => 1,
'pid' => 0,
],
[
'id' => 2,
'pid' => 0,
], [
'id' => 3,
'pid' => 1,
'parents' => [
[
'id' => 1,
'pid' => 0,
],
],
], [
'id' => 4,
'pid' => 3,
'parents' => [
[
'id' => 3,
'pid' => 1,
],
[
'id' => 1,
'pid' => 0,
],
],
], [
'id' => 5,
'pid' => 4,
'parents' => [
[
'id' => 4,
'pid' => 3,
],
[
'id' => 3,
'pid' => 1,
],
[
'id' => 1,
'pid' => 0,
],
],
],
];
5 回答
![?](http://img1.sycdn.imooc.com/54584cb50001e5b302200220-100-100.jpg)
江户川乱折腾
TA贡献1851条经验 获得超5个赞
function getParents($a,$pid){
$parents=[];
foreach($a as $v){
if($v['id']==$pid){
$parents[]=$v;
if($v['pid']!=0){
foreach(getParents($a,$v['pid']) as $vv){
$parents[]=$vv;
}
}
}
}
return $parents;
}
function getDetail($a){
$b=[];
foreach ($a as $k => $v) {
$b[]=$v;
if($v['pid']!=0){
$b[$k]['parents']=getParents($a,$v['pid']);
}
}
return $b;
}
$b=getDetail($a);
![?](http://img1.sycdn.imooc.com/533e4cf4000151f602000200-100-100.jpg)
小唯快跑啊
TA贡献1863条经验 获得超2个赞
$a = [
[
'id' => 1,
'pid' => 0,
],
[
'id' => 2,
'pid' => 0,
], [
'id' => 3,
'pid' => 1,
], [
'id' => 4,
'pid' => 3,
], [
'id' => 5,
'pid' => 4,
],
];
$b = array();
foreach ( $a as $key => $value) {
$b[$key] = treeList($a, $value);
}
/**
* 寻找item的家族树
* @param $arr 数据源
* @param $item 要寻找的元素
* @return mixed
*/
function treeList($arr, $item){
//如果pid为0是顶级的直接返回
if($item['pid'] == 0){
return $item;
}
//根据pid寻找父级元素
$parent = array();
foreach ($arr as $value) {
if ($item['pid'] == $value['id']) {
$parent = $value;
}
}
$item['parents'] = treeList($arr, $parent);
return $item;
}
![?](http://img1.sycdn.imooc.com/54584e120001811202200220-100-100.jpg)
吃鸡游戏
TA贡献1829条经验 获得超7个赞
function getParent($a,$id){
$c = array();
$pid = $a[$id-1]['pid'];
while ($pid!=0){
$c[] = $a[$pid-1];
$pid = $a[$pid-1]['pid'];
}
return $c;
}
$b = array();
foreach ($a as $k=>$value) {
$b[$k] = $value;
if($value['pid']!=0){
$b[$k]['parents'] = getParent($a,$value['id']);
}
}
- 5 回答
- 0 关注
- 523 浏览
添加回答
举报
0/150
提交
取消