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

PHP按子数组name值分组多维数组并合并action字段

解决方案

核心思路是利用resource.name作为分组标识,遍历原数组时将同组的action收集为数组,最后整理成目标结构:

<?php
// 原数组(假设已通过json_decode解析得到)
$originalArray = [
    'abc' => [
        [
            'foo' => '*',
            'action' => 'Read',
            'resource' => [
                'name' => 'name_1',
                'patternType' => 'fixed',
                'type' => 'partition',
            ],
        ],
        [
            'foo' => '*',
            'action' => 'Write',
            'resource' => [
                'name' => 'name_1',
                'patternType' => 'fixed',
                'type' => 'partition',
            ],
        ],
        [
            'foo' => '*',
            'action' => 'Read',
            'resource' => [
                'name' => 'name_2',
                'patternType' => 'fixed',
                'type' => 'partition',
            ],
        ],
        [
            'foo' => '*',
            'action' => 'Alter',
            'resource' => [
                'name' => 'name_2',
                'patternType' => 'fixed',
                'type' => 'partition',
            ],
        ],
    ],
];

// 初始化临时分组数组
$grouped = [];

// 遍历原数组的abc节点下所有元素
foreach ($originalArray['abc'] as $item) {
    $resourceName = $item['resource']['name'];
    
    // 首次遇到该资源名时,初始化分组结构
    if (!isset($grouped[$resourceName])) {
        $grouped[$resourceName] = [
            'foo' => $item['foo'],
            'action' => [$item['action']],
            'resource' => $item['resource']
        ];
    } else {
        // 已存在则追加action到数组
        $grouped[$resourceName]['action'][] = $item['action'];
    }
}

// 将分组后的关联数组转为索引数组,匹配目标结构
$result = [
    'abc' => array_values($grouped)
];

// 生成格式化后的JSON文件
file_put_contents('result.json', json_encode($result, JSON_PRETTY_PRINT));

// 输出结果验证
print_r($result);
?>

代码说明

  • 用resource.name作为临时数组的键,确保同资源的元素被归为一组
  • 首次处理资源时,将单个action转为数组格式
  • 后续遇到同资源元素,直接把action追加到对应数组中
  • 通过array_values()将关联数组转为索引数组,匹配目标结构
  • 利用json_encode()的JSON_PRETTY_PRINT参数生成可读性强的JSON文件

内容的提问来源于stack exchange,提问作者Chris C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:22:47