Skip to content

无限极分类树-引用传值

php
<?php

function tree($array){
    //第一步 构造数据
    $items = [];
    foreach($array as $value){
        $items[$value['id']] = $value;
    }
    //第二部 遍历数据 生成树状结构
    $tree = [];
    foreach($items as $key => $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['children'][] = &$items[$key];
        }else{
            $tree[] = &$items[$key];
        }
    }
    return $tree;
}

$arr = [
    ['id' => 1, 'pid' => 0, 'name' => 'name1'],
    ['id' => 2, 'pid' => 1, 'name' => 'name2'],
    ['id' => 3, 'pid' => 2, 'name' => 'name3'],
];

$res = tree($arr);

echo json_encode($res);

结果

json
[{
	"id": 1,
	"pid": 0,
	"name": "name1",
	"children": [{
		"id": 2,
		"pid": 1,
		"name": "name2",
		"children": [{
			"id": 3,
			"pid": 2,
			"name": "name3"
		}]
	}]
}]