猿问

php无限嵌套的问题

请问如何把$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,
            ],
        ],
    ],
];
万千封印
浏览 524回答 5
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);

小唯快跑啊

$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; }

扬帆大鱼

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

吃鸡游戏

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']); } }
随时随地看视频慕课网APP
我要回答