如何根据输入数组对数组进行排序


How to sort an array based on input array?

我无法根据另一个数组对数组进行排序。我已经尝试了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 函数在数组上工作比"显式"工作要快得多。