我无法根据另一个数组对数组进行排序。我已经尝试了usort,uksort和uasort,但我一无所获。关于stackoverflow的其他问题在这里并不直接适用,因为我的数组结构不同。我想对这个多维数组进行排序:
$main = Array (
[Technology] => Array ()
[World] => Array ()
[Europe] => Array ()
)
通过使用此索引数组:
$index = Array (
[0] => Europe
[1] => Technology
[2] => World
)
基本上,在这个例子中,我希望欧洲在$main阵列中排名第一,技术排名第二,世界排名第三,因为这是他们在$index阵列中的位置。我该怎么做?(请忽略上面数组中的小语法错误(
$main_sort = array()
foreach ($index as $key => $value) {
if ($main [$value]) $main_sorted [$value] = $main [$value];
}
只需遍历$index
数组,并使用$main
数组中的值将这些值映射到新数组。
给定$index
和$main
,
uksort($main, function ($k, $k2) use ($index) {
return array_search($k, $index) - array_search($k2, $index);
});
数组将根据 $index
中指定的键进行排序。未指定不匹配键的行为。
如果您在$index中没有任何值不是$main中的键,则此解决方案有效(如示例中的情况(:
$sorted = array_merge(array_flip($index), $main);
如果 $index 的值是 $main 键的超集,则可能的解决方案是:
$sorted = array_intersect_assoc(array_merge(array_flip($index), $main), $main);
请记住,让 PHP 函数在数组上工作比"显式"工作要快得多。