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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:10:30