0

我无法根据另一个数组对数组进行排序。我已经尝试过 usort、uksort 和 uasort,但我一无所获。stackoverflow 上的其他问题在这里并不直接适用,因为我的数组结构不同。我想对这个多维数组进行排序:

$main = Array (
    [Technology] => Array ()
    [World] => Array ()
    [Europe] => Array () 
)

通过使用这个索引数组:

$index = Array (
    [0] => Europe
    [1] => Technology
    [2] => World
)

基本上,在这个例子中,我希望欧洲在 $main 数组中排名第一,技术第二,世界第三,因为这是他们在 $index 数组中的定位。我怎么做?(请忽略上面数组中的小语法错误)

4

3 回答 3

1
$main_sort = array()    
foreach ($index as $key => $value) {
    if ($main [$value]) $main_sorted [$value] = $main [$value];
}

只需循环遍历$index数组并使用数组中的值将这些值映射到新$main数组。

于 2012-05-22T12:49:20.400 回答
0

给定$index$main,

uksort($main, function ($k, $k2) use ($index) {
  return array_search($k, $index) - array_search($k2, $index);
});

数组将根据 中指定的键进行排序$index。未指定不匹配键的行为。

于 2012-05-22T13:01:33.907 回答
0

如果您在 $index 中没有任何不是 $main 中的键的值(如您的示例中的情况),则此解决方案有效:

$sorted = array_merge(array_flip($index), $main);

如果 $index 的值是 $main 的键的超集,则可能的解决方案是:

$sorted = array_intersect_assoc(array_merge(array_flip($index), $main), $main);

请记住,让 PHP 函数在数组上工作比“显式”地这样做要快得多

于 2012-05-22T13:19:37.833 回答