You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何将嵌套树形多维数组递归展平为指定格式二维数组

现有方案错误原因

你当前使用array_walk_recursive实现的扁平化函数不符合需求,因为array_walk_recursive会递归遍历所有底层字段值(比如id、name的具体内容),而非将每个嵌套的节点数组作为整体保留,最终返回的是零散字段值组成的一维数组,和预期结果不符。

正确实现方案

核心逻辑采用深度优先遍历处理树形结构:

  • 遍历每个节点时,先单独提取children字段用于后续递归处理
  • 移除当前节点的children字段后,将节点加入结果数组
  • 递归处理当前节点的所有子节点,将子节点的展平结果合并到总结果中

实现代码如下:

private function flatten_array(array $nodes): array
{
    $result = [];
    foreach ($nodes as $node) {
        // 提取子节点列表用于后续递归
        $children = $node['children'] ?? [];
        // 移除不需要的children字段
        unset($node['children']);
        $result[] = $node;
        // 递归处理子节点并合并结果
        if (!empty($children)) {
            $result = array_merge($result, $this->flatten_array($children));
        }
    }
    return $result;
}
使用说明

如果你的输入是单个根节点(如你示例中的结构),调用时需要先将根节点包裹为数组再传入函数:

// 假设$root是你存储的根节点数据
$flattenedResult = $this->flatten_array([$root]);

执行后得到的$flattenedResult就是你需要的无children字段的一维数组,节点顺序和层级遍历逻辑一致,父节点在前,对应子节点紧随其后。

内容的提问来源于stack exchange,提问作者alexmorgan.cr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:09:01