我有一个像这样的多维数组:
[
'user 1' => [
['item 4' => '11385'],
['item 2' => '144268'],
['item 1' => '65774'],
['item 9' => '98523'],
],
'user 5' => [
['item 8' => '239233'],
],
'user 2' => [
['item 4' => '53718'],
['item 1' => '154687'],
],
]
我需要做的就是首先按用户(第一级键)对数组进行简单排序,然后按项目(第三级键)升序排序。
想要的结果:
[
'user 1' => [
['item 1' => '65774'],
['item 2' => '144268'],
['item 4' => '11385'],
['item 9' => '98523'],
],
'user 2' => [
['item 1' => '154687'],
['item 4' => '53718'],
],
'user 5' => [
['item 8' => '239233'],
],
]
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);
输出:(演示)
Warning: foreach() argument must be of type array|object, true
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);