PHP:如何合并多维数组中product_id匹配的内部数组并整合字段?
如何合并PHP多维数组中相同product_id的字段?
其实PHP里没有专门干这个的「一键式」函数,但我们可以通过循环遍历+数组分组的方式轻松实现你的需求,思路非常清晰,我给你一步步拆解:
首先,先明确你的原始数组(我整理成更易读的格式):
$originalArray = [ ['product_id' => 1, 'name' => 'size', 'lang_key' => 'en', 'value' => 'Medium'], ['product_id' => 1, 'name' => 'colour', 'lang_key' => 'en', 'value' => 'Orange'], ['product_id' => 2, 'name' => 'size', 'lang_key' => 'en', 'value' => 'Medium'], ['product_id' => 2, 'name' => 'colour', 'lang_key' => 'en', 'value' => 'Green'], ['product_id' => 3, 'name' => 'size', 'lang_key' => 'en', 'value' => 'Medium'], ['product_id' => 3, 'name' => 'colour', 'lang_key' => 'en', 'value' => 'Pink'], ];
完整实现代码
$mergedArray = []; foreach ($originalArray as $item) { $productId = $item['product_id']; $langKey = $item['lang_key']; // 初始化当前product_id的基础结构(如果还没处理过) if (!isset($mergedArray[$productId])) { $mergedArray[$productId] = [ 'product_id' => $productId, 'lang_key' => $langKey, 'value' => '' ]; } // 格式化name(首字母大写)并拼接value内容 $formattedName = ucfirst($item['name']); $mergedArray[$productId]['value'] .= ($mergedArray[$productId]['value'] ? ', ' : '') . "$formattedName: {$item['value']}"; } // 将关联数组转为索引数组(匹配你要的最终结构) $mergedArray = array_values($mergedArray); // 查看结果 print_r($mergedArray);
代码逻辑解释
- 临时分组存储:用
$mergedArray作为临时容器,以product_id为键,这样能快速判断当前商品是否已经被处理过,避免重复创建结构。 - 初始化基础结构:第一次遇到某个
product_id时,先创建包含product_id、lang_key和空value的基础数组。 - 拼接字段内容:把每个item的
name首字母大写(和你要的输出格式一致),然后拼接成Name: Value的格式,通过三元表达式处理第一个元素不需要前置逗号的问题。 - 转为索引数组:最后用
array_values()把以product_id为键的关联数组转为纯索引数组,完全匹配你想要的最终结构。
额外扩展提示
如果你的数组中存在同一product_id但不同lang_key的情况,只需要把临时键改成$productId . '_' . $langKey,就能区分不同语言的商品数据,避免混淆。
内容的提问来源于stack exchange,提问作者Murray
相关产品推荐
相关产品推荐

