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

如何将含children_data的嵌套数组扁平化并保留原有键名

需求说明

  • 将Magento返回的多层嵌套分类数组(嵌套字段为children_data)拍平为单层级数组
  • 保留所有原始分类字段(id、parent_id、name、is_active、position、level、product_count),仅移除children_data字段
  • 所有子分类和父分类平级放置,后续可直接导出为CSV用于主库分类与Magento分类的匹配校验

PHP实现代码(适配Magento场景)

/**
 * 拍平Magento嵌套分类数组
 * @param array $categories 待处理的嵌套分类数组
 * @param array $result 存储拍平后结果的引用数组
 */
function flattenCategories(array $categories, array &$result): void
{
    foreach ($categories as $category) {
        // 提取子分类数据
        $children = $category['children_data'] ?? [];
        // 移除children_data字段后存入结果集
        unset($category['children_data']);
        $result[] = $category;
        // 递归处理所有子分类
        if (!empty($children)) {
            flattenCategories($children, $result);
        }
    }
}

// 用法示例
// 你从Magento接口获取的原始分类数组
$originalCategory = [
    "id" => 2,
    "parent_id" => 1,
    "name" => "Category 1",
    "is_active" => true,
    "position" => 1,
    "level" => 1,
    "product_count" => 1,
    "children_data" => [
        // 此处为你提供的嵌套子分类数据
    ]
];

$flattenedCategories = [];
// 顶层为单个分类时需包装为数组传入
flattenCategories([$originalCategory], $flattenedCategories);

导出为CSV补充代码

处理完成后可直接导出为CSV文件,方便后续比对使用:

// CSV表头,与分类字段一一对应
$headers = ['分类ID', '父级分类ID', '分类名称', '是否启用', '排序位置', '层级', '关联产品数'];
$fp = fopen('magento_categories.csv', 'w');
fputcsv($fp, $headers);

foreach ($flattenedCategories as $item) {
    // 布尔类型转可读性更高的1/0
    $item['is_active'] = $item['is_active'] ? 1 : 0;
    fputcsv($fp, $item);
}
fclose($fp);

注意事项

  • 递归逻辑支持无限层级分类,无论嵌套多少层都可完整拍平
  • 所有原始字段信息完整保留,完全满足分类匹配、API导入时的映射需求
  • 生成的CSV可直接用表格工具打开,也可直接被脚本读取做自动匹配

内容的提问来源于stack exchange,提问作者Dave Hon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:06:03