这是我之前没有遇到的问题,似乎没有这方面的功能。
我正在尝试按键
对以下多维数组进行排序Array (
[hiphop] => Array (
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
[rnb] => Array (
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
[dubstep] => Array ( )
[reggae] => Array ( )
[trap] => Array ( )
)
从此数组值
Array (
[0] => hiphop
[1] => dubstep
[2] => reggae
[3] => trap
[4] => rnb
[5] => rnb
)
之前是否有人尝试过此操作或知道解决方法?
由于我是多维数组的新手,所以解释会很棒
如果你能提供帮助,请提前多多谢谢!
最终输出将匹配来自非多维数组的值组织,如此
Array (
[hiphop] => Array (
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
[dubstep] => Array ( )
[reggae] => Array ( )
[trap] => Array ( )
[rnb] => Array (
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
)
答案 0 :(得分:2)
您可以使用uksort
,这样您就可以根据用户提供的比较功能按键排序。使用该功能,您可以自己创建一个功能,这样您就可以轻松地隐藏复杂的功能。
例如,你想要一个像ksort
这样的函数,只需要指定一个外部数组的键,所以这样的函数可能如下所示:
bool ksort_ext(&$array, $keys)
对于实现,您可以包装uksort,如下所示:
function ksort_ext(&$array, $keys)
{
return uksort($array, function($a, $b) use ($keys) {
// Result of callback is based on the position of $a and $b in $keys
return array_search($a, $keys) - array_search($b, $keys);
});
}
然后,您可以像调用其他排序函数一样调用它,只需将外部数组键作为第二个参数。
$array1 = array(
'hiphop' => array(1,2,3),
'rnb' => array(1,2,3),
'dubstep' => array(1,2,3),
'reggae' => array(1,2,3),
'trap' => array(1,2,3));
$array2 = array('hiphop', 'dubstep', 'reggae', 'trap', 'rnb');
var_dump(ksort_ext($array1, $array2)); // Should return true
var_dump($array1); // Should display the ordered array,
答案 1 :(得分:2)
最简单的方法是"翻转"数组定义排序 - 然后获取与另一个数组中 new 键匹配的值:
$s = array ("hiphop","dubstep","reggae","trap","rnb");
$target = array_flip($s);
foreach($target AS $key => &$value){
$value = $array_containing_unsorted_values[$key];
}
注意:如果在排序数组中出现两次相同的值,则不起作用 - 但是永远不会发生,因为排序定义没有。
在每次排序比较中,应该比使用array_search
2次更快。
结果:
Array
(
[hiphop] => Array
(
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
[dubstep] => Array
(
)
[reggae] => Array
(
)
[trap] => Array
(
)
[rnb] => Array
(
[0] => 2123
[1] => 5683
[2] => 2345
[3] => 4567
)
)