PHP如何按条件合并嵌套数组的指定键
合并嵌套数组中同company+type的子数组cars
嘿,我来帮你搞定这个数组合并的需求!针对你说的“仅当子数组的company和type都相同时,合并它们的cars数组”这个需求,用PHP可以这样实现:
实现思路
核心逻辑是通过company和type的组合生成唯一标识,把相同标识的子数组归为一组,然后合并它们的cars数组。具体步骤:
- 用一个临时数组存储分组后的结果
- 遍历原数组,为每个子数组生成
company|type格式的唯一键 - 相同键的子数组就合并
cars,不同键的直接加入临时数组 - 最后把临时数组转成和原数组格式一致的索引数组
完整代码示例
// 你的示例输入数组(补全了未写完的部分) $originalArray = [ [ 'company' => 'Jeep', 'type' => 'SUV', 'cars' => ['Compass'] ], [ 'company' => 'Jeep', 'type' => 'SUV', 'cars' => ['Wrangler'] ], [ 'company' => 'Mercedes', 'type' => 'Sedan', 'cars' => ['C-Class'] ], [ 'company' => 'Mercedes', 'type' => 'Sedan', 'cars' => ['E-Class'] ] ]; // 初始化临时数组用于分组存储 $mergedArray = []; foreach ($originalArray as $item) { // 生成唯一键:用company和type拼接,确保相同组合的子数组被分到同一组 $uniqueKey = $item['company'] . '|' . $item['type']; if (isset($mergedArray[$uniqueKey])) { // 如果该组合已存在,合并两个cars数组 $mergedArray[$uniqueKey]['cars'] = array_merge( $mergedArray[$uniqueKey]['cars'], $item['cars'] ); // 如果你需要去重(比如担心有重复的车型),可以加上这行: // $mergedArray[$uniqueKey]['cars'] = array_unique($mergedArray[$uniqueKey]['cars']); } else { // 组合不存在,直接将当前子数组加入临时数组 $mergedArray[$uniqueKey] = $item; } } // 把关联数组转为连续索引数组(和原数组格式保持一致) $finalResult = array_values($mergedArray); // 打印结果看看 print_r($finalResult);
运行结果
执行上述代码后,你会得到合并后的数组:
Array ( [0] => Array ( [company] => Jeep [type] => SUV [cars] => Array ( [0] => Compass [1] => Wrangler ) ) [1] => Array ( [company] => Mercedes [type] => Sedan [cars] => Array ( [0] => C-Class [1] => E-Class ) ) )
这个方案灵活且高效,不管你的数组有多少个子项,都能快速完成合并。如果有特殊需求(比如去重、排序cars),也可以在代码里轻松调整~
内容的提问来源于stack exchange,提问作者Rahul Verma
相关产品推荐
相关产品推荐

