2012-05-22 259 views
0

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

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

通过使用该索引数组:

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

基本上,在这个例子中,我想欧洲首屈一指的$主阵列中,技术第二和世界第三,因为这是他们在$ index数组中的位置。我怎么做? (请在上面的阵列忽略小的语法错误)

+0

你试过'ksort'快得多? – flowfree

+0

你可以在这里使用array_multisort吗?它通常用于对多维数组进行排序。但在这里,你仍然需要对你的数组做一些初始化处理。http://php.net/manual/en/function.array-multisort.php – verisimilitude

回答

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

只需通过$index阵列环和那些值映射到使用从$main数组中的值的新数组。

+0

它的工作原理。谢谢 –

+0

如果$ index包含的值不是$ main的键值,则在$ main_sorted中可能出现空值,并且可能在您的日志中出现警告 –

+0

通过添加简单的if语句 – Jeroen

0

鉴于$index$main

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

阵列将根据$index指定的键进行排序。没有指定不匹配键的行为。

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

如果$指数的值是:

0

此解决方案,如果你没有这不是在$主要的关键在$索引中的任何值(是你的榜样的情况下)的作品的$主键的超集,一个可能的解决方案是:

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

请记住,让PHP函数对数组的工作,比这样做“明确”

相关问题