數據結構
$rows = [
['id'=>1, 'name'=>'dev', 'parentid'=>0],
['id'=>2, 'name'=>'php', 'parentid'=>1],
['id'=>3, 'name'=>'smarty', 'parentid'=>2],
['id'=>4, 'name'=>'life', 'parentid'=>0],
['id'=>5, 'name'=>'pdo', 'parentid'=>2],
['id'=>6, 'name'=>'pdo-mysql', 'parentid'=>5],
['id'=>7, 'name'=>'java', 'parentid'=>1],
];
遞歸構建函數
function findChild(&$arr, $id) {
$childs = [];
foreach ($arr as $k => $v) {
if ($v['parentid'] == $id) $childs[] = $v;
}
return $childs;
}
function buildTree($root_id) {
global $rows;
$childs = findChild($rows, $root_id);
if (empty($childs)) return null;
foreach ($childs as $k => $v) {
$res = buildTree($v['id']);
if ($res !== null) $childs[$k]['childs'] = $res;
}
return $childs;
}
$tree = buildTree(0);
print_r($tree);
輸出結構
Array
(
[0] => Array
(
[id] => 1
[name] => dev
[parentid] => 0
[childs] => Array
(
[0] => Array
(
[id] => 2
[name] => php
[parentid] => 1
[childs] => Array
(
[0] => Array ( [id]=>3, [name]=>smarty, [parentid]=>2 )
[1] => Array
(
[id] => 5
[name] => pdo
[parentid] => 2
[childs] => Array ( [0] => Array ( [id]=>6, [name]=>pdo-mysql, [parentid]=>5 ) )
)
)
)
[1] => Array ( [id]=>7, [name]=>java, [parentid]=>1 )
)
)
[1] => Array ( [id]=>4, [name]=>life, [parentid]=>0 )
)