php脚本处理树形数据
在实际开发工作中当遇到需要处理树形数据时,通常会使用递归的方式来实现。
提示
假设是在一个类中实现
转换方法
private function listToTree(array $list, string $idField = 'id', string $pidField = 'parent_id', int $rootPid = 0): array
{
$tree = [];
$map = [];
// 1、先全量索引,用引用保证后续修改能同步
foreach ($list as &$item) {
$item['children'] = [];
$map[$item[$idField]] = &$item;
}
// 解除引用,避免副作用
unset($item);
// 2、循环挂载子节点
foreach ($map as &$item) {
$pid = $item[$pidField];
if ($pid === $rootPid) {
// 顶级节点
$tree[] = &$item;
} elseif (isset($map[$pid])) {
// 找到父节点,塞入children(通过引用同步)
$map[$pid]['children'][] = &$item;
} else {
// 找不到父节点
echo "警告:ID={$item[$idField]} 父ID={$pid} 不存在,丢弃\n";
}
}
unset($item);
return $tree;
}
2026/6/14大约 5 分钟
