function tree(array $items)
{
$ids = [];
foreach ($items as $item)
{
if ($item['id'] == $item['pid']) continue; //如果父 ID 等于自己,避免死循环,跳过
$ids[] = $item['id'];
$items[ ($item['pid']) ][ 'children' ][ ($item['id']) ] = &$items[ ($item['id']) ];
}
$result = Arr::except($items, $ids);
return count($result) === 1 ? Arr::get(array_pop($result), 'children', []) : $result;
}
$items = [
['id' => 0, 'name' => 'none', 'pid' => 0],
['id' => 1, 'name' => 'test', 'pid' => 0],
['id' => 2, 'name' => 'test1', 'pid' => 1],
['id' => 3, 'name' => 'test2', 'pid' => 1],
];
tree($items);