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

按数字键合并多数组并去除子数组重复元素的技术实现问题

问题:按数字ID键合并数组并去重子数组元素

需求说明

  • 存在多个带数字键(ID,需保持数值类型,不能转为字符串)的数组
  • 按数字键分组合并所有数组的值
  • 子数组中需去除重复元素

初始输入数组

$arrays = [
    [
        77 => [
            'Bold Condensed',
            'Bold Condensed 2',
            'Bold Condensed 3'
        ]
    ],
    [
        77 => ['Bold Condensed'],
        136 => ['Regular']
    ],
    [
        77 => ['Bold Condensed (1, 2, 3)'],
        168 => ['Regular', 'Bold']
    ]
];

期望输出

Array
(
    [77] => Array
        (
            [0] => Bold Condensed
            [1] => Bold Condensed 2
            [2] => Bold Condensed 3
            [3] => Bold Condensed (1, 2, 3)
        )
    [136] => Array
        (
            [0] => Regular
        )
    [168] => Array
        (
            [0] => Regular
            [1] => Bold
        )
)

尝试的方法及问题

尝试使用array_merge和array_merge_recursive实现,代码如下:

$megaArray = [];

foreach( $arrays as $key => $value) {
  if(array_key_exists($key, $arrays)){
    $megaArray[$key] = array_merge_recursive($value);
  }
}

但结果仅保留了每个ID键对应的最新子数组,无法合并所有元素并去重,不符合需求。

解决方案

通过嵌套循环遍历每个数组的ID键,合并子数组元素后去重,同时确保ID保持数值类型:

$megaArray = [];

foreach ($arrays as $array) {
    foreach ($array as $id => $items) {
        // 强制转换为整数,确保ID保持数值类型
        $id = (int)$id;
        
        if (!isset($megaArray[$id])) {
            $megaArray[$id] = [];
        }
        
        // 合并当前子数组元素
        $megaArray[$id] = array_merge($megaArray[$id], $items);
        // 去重并重新索引数组,保持元素顺序
        $megaArray[$id] = array_values(array_unique($megaArray[$id]));
    }
}

代码逻辑说明

  1. 外层循环遍历所有输入的数组
  2. 内层循环遍历每个数组中的ID键及其对应的子元素数组
  3. 使用(int)$id确保ID始终为数值类型,避免被转为字符串
  4. 用array_merge将当前子数组的元素合并到结果数组的对应ID下
  5. 调用array_unique去除重复元素,再用array_values重新索引,保证子数组是连续的数字索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:15:20