在PHP中,如何根据键排序关联数组


In PHP, how to sort associative array sorting based on key

我有一个嵌套的关联数组,如下所示,需要帮助为每个键(如'first_name'和'score')排序数组。

例如:

Array
(
    [12345] => Array
        (
            [75] => Array
                (
                    [first_name] => Xen
                    [score] => 245
                )
        )
    [9876] => Array
        (
            [75] => Array
                (
                    [first_name] => Shane
                    [score] => 300
                )
        ) 
    [4567] => Array
        (
            [75] => Array
                (
                    [first_name] => Dan
                    [score] => 100
                )
        ) 
)

结果应该是数组按键升序排序:

Array
(
    [first_name] => Array
                 (
                   [0] => 4567
                   [1] => 9876
                   [2] => 12345
                 )
    [score] => Array
           (
             [0] => 4567
             [1] => 12345
             [2] => 9876
           )
)

ksort是PHP的键排序函数。因此,要按键对数组$arr排序,请执行:

ksort($arr);

注意ksort返回一个布尔值(成功或失败),所以你不应该做$arr = ksort($arr);ksort修改原数组

要按键递归地排序多维关联数组(例如,关联数组的关联数组),请尝试ksort手册页底部的用户提供的函数(我没有尝试过,但看起来它会工作得很好):

function deep_ksort(&$arr) {
    ksort($arr);
    foreach ($arr as &$a) {
        if (is_array($a) && !empty($a)) {
            deep_ksort($a);
        }
    }
}