如何转换或重组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
相关产品推荐
相关产品推荐

