我有一个“简单”的多维数组,如下所示:
array(3) {
["user 1"]=>
array(4) {
[0]=>
array(1) {
["item 4"]=>
string(5) "11385"
}
[1]=>
array(1) {
["item 2"]=>
string(6) "144268"
}
[2]=>
array(1) {
["item 1"]=>
string(5) "65774"
}
[3]=>
array(1) {
["item 9"]=>
string(5) "98523"
}
}
["user 5"]=>
array(1) {
[0]=>
array(1) {
["item 8"]=>
string(6) "239233"
}
}
["user 2"]=>
array(2) {
[0]=>
array(1) {
["item 4"]=>
string(5) "53718"
}
[1]=>
array(1) {
["item 1"]=>
string(6) "154687"
}
}
}
我需要做的就是首先按用户对数组进行排序,然后按项目排序。上升。我怎么能这样做呢?如果需要的话我会提供一些代码:)
谢谢!
ksort
按键排序
$newArray = array();
# start by sorting users
$yourArray = ksort($yourArray);
# then sort sub items
foreach($yourArray as $user=>$theirItems) {
$theirItems = ksort($theirItems); # assuming you still want to sort by key;
$newArray[$user] = $theirItems;
}
var_dump($newArray);
usort()
然后创建两个比较函数并使用它们对数组进行一一排序。
要按第一级键排序,然后按每个子数组中 firat 元素的键排序,请调用
ksort()
,然后按单独元素的键在每组数据中排序。
代码:(演示)
ksort($array);
foreach ($array as &$v) {
usort(
$v,
fn($a, $b) => key($a) <=> key($b)
);
}
var_export($array);
或者使用
array_myltisort()
来减少总迭代函数调用:(Demo)
ksort($array);
foreach ($array as &$v) {
array_multisort(
array_map('key', $v),
$v
);
}
var_export($array);