我在根据另一个数组排序数组时遇到问题。我试过usort,uksort和uasort,但我无处可去。关于stackoverflow的其他问题在这里不直接适用,因为我的数组结构不同。我想对这个多维数组进行排序:
$main = Array (
[Technology] => Array ()
[World] => Array ()
[Europe] => Array ()
)
使用此索引数组:
$index = Array (
[0] => Europe
[1] => Technology
[2] => World
)
基本上,在这个例子中,我希望欧洲在$ main数组中排在第一位,技术第二位和第三位,因为这是他们在$ index数组中的定位。我怎么做? (请忽略上面数组中的小语法错误)
答案 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函数在数组上工作比“明确”
快得多