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

如何转换或重组PHP数组:合并同名条目至新数组/行

合并PHP数组中名称相同的条目

嘿,我来帮你搞定PHP数组里同名条目的合并操作!先给你分几种常见场景来拆解,都是实际开发里常用的方案:

场景1:多维数组合并(整合数值类字段)

假设你有一组包含名称、数量、价格的商品数组,要把同名商品的数量累加,保留统一价格:

// 原始数组
$products = [
    ['name' => '苹果', 'quantity' => 2, 'price' => 5],
    ['name' => '香蕉', 'quantity' => 3, 'price' => 3],
    ['name' => '苹果', 'quantity' => 4, 'price' => 5],
    ['name' => '橙子', 'quantity' => 1, 'price' => 4],
    ['name' => '香蕉', 'quantity' => 2, 'price' => 3]
];

// 初始化合并后的数组
$mergedProducts = [];

foreach ($products as $item) {
    $productName = $item['name'];
    // 如果该商品已存在,累加数量
    if (isset($mergedProducts[$productName])) {
        $mergedProducts[$productName]['quantity'] += $item['quantity'];
    } else {
        // 不存在则直接加入数组,用名称做键
        $mergedProducts[$productName] = $item;
    }
}

// 可选:如果需要转成索引数组(去掉名称键)
$mergedProducts = array_values($mergedProducts);

print_r($mergedProducts);

运行后会得到合并后的结果:

Array
(
    [0] => Array
        (
            [name] => 苹果
            [quantity] => 6
            [price] => 5
        )

    [1] => Array
        (
            [name] => 香蕉
            [quantity] => 5
            [price] => 3
        )

    [2] => Array
        (
            [name] => 橙子
            [quantity] => 1
            [price] => 4
        )
)

场景2:简单索引数组统计出现次数

如果你的数组只是单纯的名称列表,想统计每个名称出现的次数,直接用PHP内置函数更高效:

$nameList = ['苹果', '香蕉', '苹果', '橙子', '香蕉', '苹果'];
$countResult = array_count_values($nameList);

print_r($countResult);
// 输出:Array ( [苹果] => 3 [香蕉] => 2 [橙子] => 1 )

场景3:合并复杂字段(比如数组类型属性)

如果需要合并的是数组类字段(比如标签、分类),可以用array_merge+array_unique来整合:

$originalData = [
    ['name' => 'PHP教程', 'tags' => ['后端', '入门']],
    ['name' => 'PHP教程', 'tags' => ['实战', '后端']],
    ['name' => '前端教程', 'tags' => ['JS', '入门']]
];

$mergedData = [];
foreach ($originalData as $item) {
    $name = $item['name'];
    if (isset($mergedData[$name])) {
        // 合并标签并去重
        $mergedData[$name]['tags'] = array_unique(
            array_merge($mergedData[$name]['tags'], $item['tags'])
        );
    } else {
        $mergedData[$name] = $item;
    }
}

核心思路就是用名称作为唯一标识(数组的键),遍历原始数组时判断该名称是否已存在,存在就按需整合数据,不存在则新增条目,这样就能高效完成合并啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:45:36