【问题标题】:Sort php multidimensional array by sub-value [duplicate]按子值对php多维数组进行排序[重复]
【发布时间】:2011-05-29 07:59:07
【问题描述】:

我有这个数组

Array
(
[data] => Array
    (
        [0] => Array
            (

                [id] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006034
                [initial_timestamp] => 1293005125
                [user] => administrator
            )

        [1] => Array
            (

                [mid] => 1293001908
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293001908
                [initial_timestamp] => 1293001908
                [user] => administrator
            )

        [2] => Array
            (

                [mid] => 1293009999
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293009999
                [initial_timestamp] => 1293009999
                [user] => administrator
            )

        [3] => Array
            (

                [mid] => 1293006666
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006666
                [initial_timestamp] => 1293006666
                [user] => administrator
            )

        [4] => Array
            (

                [mid] => 1293005125
                [viewed] => TRUE
                [active] => TRUE
                [time] => December 22, 2010 13:00 hours
                [timestamp] => 1293006125
                [initial_timestamp] => 1293005125
                [user] => administrator2
            )


    )

现在我想按[mid] 对这个数组进行排序 我该怎么做?

目前我在 foreach 循环中对其进行排序
必须有更好的方法

编辑 我希望输出类似

[mid] key => array value

谢谢

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以使用usort 函数。

    function cmp($a, $b) {
            return $a["mid"] - $b["mid"];
    }
    usort($arr, "cmp");
    

    See it

    【讨论】:

    • 是的,但我发现这些例子有点难以理解
    • @RisingSum:我已经用一个工作链接更新了我的答案。
    • 自 2013 年起(PHP 5+),我们可以将函数嵌套在 usort 调用中,如下所示:usort($arr, function($a, $b) { return $a["mid"] - $b["mid"; });
    • 这是来自archive.org web.archive.org/web/20130429091044/http://ideone.com:80/cW5xZ的“查看”链接
    【解决方案2】:

    更新

    我最近answered 这个问题在关于排序多维数组的“权威”主题中以一种更有能力的方式提出。下面的答案针对旧版本的 PHP(5.2 及更早版本);虽然这个概念是合理的,但现在有更好的做事方式。请阅读其他问题的答案。

    原始(非常过时的)答案

    usort 正是针对这种情况的。如果您还需要保留密钥,则适当的函数是uasort

    例如:

    usort($array, create_function('$a, $b',
       'if ($a["mid"] == $b["mid"]) return 0; return ($a["mid"] < $b["mid"]) ? -1 : 1;'));
    

    当然如果你不介意的话,你可以正确声明比较函数:

    function compareMid($a, $b)
    {
        if ($a['mid'] == $b['mid']) {
            return 0;
        }
        return ($a['mid'] < $b['mid']) ? -1 : 1;
    }
    

    并像这样使用它:

    usort($array, 'compareMid');
    

    所有这些都在文档中。

    【讨论】:

      【解决方案3】:

      另一种解决方案是使用array_multisort

      <?php
      // Obtain a list of columns
      foreach ($data as $key => $row) {
          $mid[$key]  = $row['mid'];
      }
      
      // Sort the data with mid descending
      // Add $data as the last parameter, to sort by the common key
      array_multisort($mid, SORT_DESC, $data);
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-15
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多