【问题标题】:In PHP, how to sort associative array sorting based on key [closed]在 PHP 中,如何根据键对关联数组排序进行排序 [关闭]
【发布时间】:2013-05-19 04:20:24
【问题描述】:

我有一个如下所示的嵌套关联数组,需要帮助为每个键(例如“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
           )
)

【问题讨论】:

  • 为什么我不赞成这个问题:meta.stackexchange.com/a/149138/133242
  • 这个网站上有很多关于如何以任何可以想象的方式对数组进行排序的 q/a... 花几分钟看看。
  • @Orangepill user1971065 是你妈妈吗?
  • 没有我妈妈是 user1723658 :-)
  • 啊,抱歉,很容易犯错:)

标签: php arrays sorting


【解决方案1】:

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);
        }
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多