<?php
$array = [
['id' => 1, 'pid' => 0, 'name' => '这是主类'],
['id' => 2, 'pid' => 0, 'name' => '这是主类'],
['id' => 3, 'pid' => 1, 'name' => '父级为1子类'],
['id' => 4, 'pid' => 2, 'name' => '父级为2子类'],
['id' => 5, 'pid' => 3, 'name' => '父级为3子类'],
];
function tree($array,$pid){
$tree = array();
foreach($array as $k=>$v){
if($v['pid'] == $pid){
unset($array[$k]);
$v['child']=tree($array,$v['id']);
if (!$v['child']) {
unset($v['child']);
}
$tree[] = $v;
}
}
return $tree;
}
echo "<pre>" . print_r(tree($array, 0),1) . "</pre>";
?>
打印结果
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 这是主类
[child] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[name] => 父级为1子类
[child] => Array
(
[0] => Array
(
[id] => 5
[pid] => 3
[name] => 父级为3子类
)
)
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[name] => 这是主类
[child] => Array
(
[0] => Array
(
[id] => 4
[pid] => 2
[name] => 父级为2子类
)
)
)
)
第二种方式 数组引用
function generateTree($rows, $id = 'id', $pid = 'pid')
{
$items = array();
foreach ($rows as $row) {
$items[$row[$id]] = $row;
}
foreach ($items as $item) {
$items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]];
}
return isset($items[0]['son']) ? $items[0]['son'] : array();
}
echo "<pre>" . print_r(generateTree($array), 1) . "</pre>";