PHP多数组合并并按车型重新分组的高效实现方案咨询
高效实现PHP数组按车型重新分组的方案
问题说明
现有三个按城市分组的PHP数组,需要将它们合并后按车型(car字段)重新分组。普通array_merge无法满足需求,若采用逐个循环处理的方式担心效率问题,寻求更高效的实现方案。
输入数组示例
// 第一个数组 $londonData = [ "london" => [ ["car" => "audi", "max_price" => "20000", "min_price" => "500", "total" => "500"], ["car" => "bmw", "max_price" => "50000", "min_price" => "1000", "total" => "2000"], ["car" => "mercedez", "max_price" => "100000", "min_price" => "5000", "total" => "50"] ] ]; // 第二个数组 $miamiData = [ "miami" => [ ["car" => "bmw", "max_price" => "12348", "min_price" => "369", "total" => "123"], ["car" => "mercedez", "max_price" => "98888", "min_price" => "1500", "total" => "369"], ["car" => "audi", "max_price" => "1588", "min_price" => "100", "total" => "50"] ] ]; // 第三个数组 $romaData = [ "roma" => [ ["car" => "mercedez", "max_price" => "20000", "min_price" => "500", "total" => "500"], ["car" => "bmw", "max_price" => "50000", "min_price" => "1000", "total" => "2000"], ["car" => "audi", "max_price" => "100000", "min_price" => "5000", "total" => "50"] ] ];
期望输出结构
[ "audi" => [ "london" => ["max_price" => "20000", "min_price" => "500", "total" => "500"], "miami" => ["max_price" => "1588", "min_price" => "100", "total" => "50"], "roma" => ["max_price" => "100000", "min_price" => "5000", "total" => "50"] ], "bmw" => [ "london" => ["max_price" => "50000", "min_price" => "1000", "total" => "2000"], "miami" => ["max_price" => "12348", "min_price" => "369", "total" => "123"], "roma" => ["max_price" => "50000", "min_price" => "1000", "total" => "2000"] ], "mercedez" => [ "london" => ["max_price" => "100000", "min_price" => "5000", "total" => "50"], "miami" => ["max_price" => "98888", "min_price" => "1500", "total" => "369"], "roma" => ["max_price" => "20000", "min_price" => "500", "total" => "500"] ] ]
高效实现方案
可以通过一次嵌套循环完成分组,时间复杂度为O(n)(n为所有车型数据的总条数),每个数据仅被处理一次,效率最优且代码简洁:
// 合并所有城市数据为一个以城市名为键的数组 $allCityData = array_merge($londonData, $miamiData, $romaData); $result = []; foreach ($allCityData as $city => $cars) { foreach ($cars as $carInfo) { $carModel = $carInfo['car']; // 移除car字段,保留价格和总数数据 unset($carInfo['car']); // 按车型分组,将当前城市的数据存入对应车型下 $result[$carModel][$city] = $carInfo; } } // 输出结果 print_r($result);
方案优势
- 直接遍历原始数据,避免了不必要的数组复制或转换操作,内存占用低
- 逻辑清晰,易于维护和调试
- 时间复杂度为线性,是处理此类分组需求的最优效率方案
内容的提问来源于stack exchange,提问作者John Stockton
相关产品推荐
相关产品推荐

