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

如何将多维关联数组转为按外部关联键排序的多维索引数组

解决方案:多维关联数组转有序索引数组与数据矩阵

嘿,我懂你要搞定的需求——把这些零散的关联数组整理成有序的汽车品牌列表,再生成对应的索引-值矩阵对吧?我之前也处理过类似的场景,给你一个简洁易读的实现方案:

第一步:生成排序后的唯一汽车品牌列表

我们先把所有子数组里的汽车品牌键名全部提取出来,去重后再排序:

$array = [
    ['Volvo' => 22, 'BMW' => 13, 'Saab' => 5, 'Land Rover' => 11],
    ['Nissan' => 10, 'Saab' => 4],
    ['Land Rover' => 22, 'BMW' => 9, 'Nissan' => 2, 'Ford' => 17]
];

// 收集所有出现过的汽车品牌
$allCars = [];
foreach ($array as $subArray) {
    $allCars = array_merge($allCars, array_keys($subArray));
}
// 去重并按字母排序
$array_cars = array_unique($allCars);
sort($array_cars);

执行后$array_cars就会得到你要的有序列表:

Array
(
    [0] => BMW
    [1] => Ford
    [2] => Land Rover
    [3] => Nissan
    [4] => Saab
    [5] => Volvo
)

第二步:生成对应的compiled_data矩阵

接下来遍历每个品牌,在原数组的子数组里查找该品牌的存在情况,记录对应的子数组索引和数值:

$compiled_data = [];
foreach ($array_cars as $car) {
    $carRecord = [];
    foreach ($array as $subIndex => $subArray) {
        if (isset($subArray[$car])) {
            $carRecord[$subIndex] = $subArray[$car];
        }
    }
    $compiled_data[] = $carRecord;
}

最终$compiled_data的结构完全符合你的预期:

Array
(
    [0] => Array
        (
            [0] => 13
            [2] => 9
        )

    [1] => Array
        (
            [2] => 17
        )

    [2] => Array
        (
            [0] => 11
            [2] => 22
        )

    [3] => Array
        (
            [1] => 10
            [2] => 2
        )

    [4] => Array
        (
            [0] => 5
            [1] => 4
        )

    [5] => Array
        (
            [0] => 22
        )

)

关于你提到的array_match()/array_intersect()

这两个函数更适合处理数组值的匹配交集,而我们的需求是提取键名、去重排序,再跨子数组按键收集数据,所以用基础的遍历+数组操作会更直接高效,逻辑也更清晰。

内容的提问来源于stack exchange,提问作者James Scott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:00