为了账号安全,请及时绑定邮箱和手机立即绑定

php无限嵌套的问题

php无限嵌套的问题

PHP
万千封印 2019-03-04 20:50:25
请问如何把$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 回答

?
江户川乱折腾

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);
查看完整回答
反对 回复 2019-03-18
?
小唯快跑啊

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;
}
查看完整回答
反对 回复 2019-03-18
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

树形结构,网上有很多参考案例
参考链接

查看完整回答
反对 回复 2019-03-18
?
吃鸡游戏

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']);
    }
}
查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 523 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信