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

时间:2012-05-22 12:47:44

标签: php arrays multidimensional-array sorting usort

我在根据另一个数组排序数组时遇到问题。我试过usort,uksort和uasort,但我无处可去。关于stackoverflow的其他问题在这里不直接适用,因为我的数组结构不同。我想对这个多维数组进行排序:

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

使用此索引数组:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

给定$index$main

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

将根据$index中指定的密钥对数组进行排序。未指定键的行为未指定。

答案 2 :(得分:0)

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

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

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

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

请记住,让PHP函数在数组上工作比“明确”

快得多