如何将多维关联数组转为按外部关联键排序的多维索引数组
解决方案:多维关联数组转有序索引数组与数据矩阵
嘿,我懂你要搞定的需求——把这些零散的关联数组整理成有序的汽车品牌列表,再生成对应的索引-值矩阵对吧?我之前也处理过类似的场景,给你一个简洁易读的实现方案:
第一步:生成排序后的唯一汽车品牌列表
我们先把所有子数组里的汽车品牌键名全部提取出来,去重后再排序:
$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
相关产品推荐
相关产品推荐

