按第一级键对 3d 数组进行排序,然后按单独的第三级键对第二级进行排序

问题描述 投票:0回答:3

我有一个像这样的多维数组:

[
    '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'],
    ],
]
php arrays sorting multidimensional-array custom-sort
3个回答
5
投票

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

0
投票

使用

usort()
然后创建两个比较函数并使用它们对数组进行一一排序。


0
投票

要按第一级键排序,然后按每个子数组中 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);
© www.soinside.com 2019 - 2024. All rights reserved.