【问题标题】:Sorting Associative Array by Date [duplicate]按日期对关联数组进行排序[重复]
【发布时间】:2013-04-23 11:33:52
【问题描述】:

我在 php 中有这个数组之王,想按数组的日期 Array[i][2] 对其进行排序.. 最高日期应该在顶部.. 我该怎么做?

这是我的数组:

Array ( 
    [0] => Array ( 
        [0] => 15.04.2013 
        [1] => 17:34 
        [2] => 06.04.2013 
        ) 

    [1] => Array ( 
        [0] => 15.04.2013 
        [1] => 15:12 
        [2] => 13.04.2013 
    ) 

    [2] => Array ( 
        [0] => 15.04.2013 
        [1] => 16:42 
        [2] => 16.02.2013 
    ) 

    [3] => Array ( 
        [0] => 04.04.2013 
        [1] => 21:12 
        [2] => 16.03.2013 
    ) 

    [4] => Array ( 
        [0] => 29.04.2013 
        [1] => 17:16 
        [2] => 19.04.2013 
    ) 
) 

【问题讨论】:

  • 这个问题有答案。 stackoverflow.com/questions/777597/…
  • 已经尝试使用usort,但是排序错误
  • @IlendemliMuhammet 您是否尝试过像我下面提供的示例一样的 usort?

标签: php arrays sorting


【解决方案1】:

您可以使用usort

例子:

usort($array,function ($a,$b){
    $t1 = strtotime($a[0]);
    $t2 = strtotime($b[0]);
    if ($t1 == $t2) {
        return 0;
    }
    return ($t1 < $t2) ? -1 : 1;
});

【讨论】:

  • 这个怎么用?怎么调用函数?
  • @IlendemliMuhammet 将整个事情包装在一个你自己名字的函数中。那么你可以随时随地调用它。
  • 它使用了usort,传递数组,然后是一个匿名函数。
  • awesome 似乎在起作用! :)
  • @IlendemliMuhammet 接受他的回答,这样他就可以得到点赞。
【解决方案2】:

你可以使用 usort() 来做到这一点,像这样:

function cmp($a,$b) {
   if ($a[2] == $b[2]) {
      return 0;
   }
   $arr = explode('.',$a[2]);
   $brr = explode('.',$b[2]);
   $anum = (int) ($arr[2] . $arr[1] . $arr[0]);
   $bnum = (int) ($brr[2] . $brr[1] . $brr[0]);
   return ($anum < $bnum) ? -1 : 1;
}

usort($array, "cmp");

【讨论】:

    【解决方案3】:

    试试这个:

    function cmp($a, $b)
    {
        $a = strtotime($a[2]);
        $b = strtotime($b[2]);
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
    
    $a = array ( 
        0 => array ( 
            0 => '15.04.2013' 
            ,1 => '17:34'
            ,2 => '06.04.2013' 
            ) 
    
        ,1 => array ( 
            0 => '15.04.2013' 
            ,1 => '15:12' 
            ,2 => '13.04.2013' 
        ) 
    
        ,2 => array ( 
            0 => '15.04.2013' 
            ,1 => '16:42' 
            ,2 => '16.02.2013' 
        ) 
    
        ,3 => array ( 
            0 => '04.04.2013' 
            ,1 => '21:12' 
            ,2 => '16.03.2013' 
        ) 
    
    ) ;
    
    usort($a, "cmp");
    

    【讨论】:

    • 用 ibu 的代码做了同样的事情
    【解决方案4】:

    您可以使用usort 编写自定义排序器回调(就像在 lbu 的回答中一样)

    array_multisort 是另一种选择,使用 like;

    这里是一个多维数组的排序函数

    https://gist.github.com/tufanbarisyildirim/1220785

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2015-02-25
    • 2013-05-10
    • 2018-02-09
    • 1970-01-01
    • 2014-05-22
    • 2011-06-01
    相关资源
    最近更新 更多