PHP数组无限分级数据的层级化处理代码


在处理PHP中的无限分级数据(如树形结构的数据)时,我们通常需要一个函数来递归地构建层级关系。这里我将提供一个示例代码,该函数可以将扁平的数组数据转换为具有层级结构的数组。

首先,假设我们有如下的扁平数组,每个元素包含`id`、`parent_id`以及可能的其他数据:


$flatData = [
    ['id' => 1, 'parent_id' => 0, 'name' => 'Root'],
    ['id' => 2, 'parent_id' => 1, 'name' => 'Child 1'],
    ['id' => 3, 'parent_id' => 1, 'name' => 'Child 2'],
    ['id' => 4, 'parent_id' => 2, 'name' => 'Grandchild 1'],
    // ... 可能还有更多层级
];

接下来,我们将编写一个函数来转换这个数组:


function buildTree(array $elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            // 如果当前元素有子元素,则添加到'children'键下
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
        }
    }

    return $branch;
}

// 使用函数
$tree = buildTree($flatData);

// 打印结果查看
echo '<pre>';
print_r($tree);
echo '</pre>';

在这个示例中,`buildTree`函数接收两个参数:一个数组`$elements`(包含所有元素)和一个`$parentId`(用于确定当前层级的父ID)。函数内部,我们遍历所有元素,查找与给定`$parentId`相匹配的元素。对于每个找到的元素,我们递归调用`buildTree`函数,将`$element['id']`作为新的`$parentId`,以找到其子元素。如果当前元素有子元素,则将它们存储在`$element['children']`键下。最后,函数返回当前层级的所有元素。

注意:这个解决方案假设`parent_id`为0的元素是根元素,并且每个元素的`id`是唯一的。此外,该解决方案也假设`$elements`数组已经被正确填充且格式正确。