【问题标题】:How to sort array based on date in descending order [duplicate]如何根据日期按降序对数组进行排序[重复]
【发布时间】:2016-03-02 10:21:15
【问题描述】:

我需要使用 php 根据日期按降序对数组对象进行排序。我尝试了以下代码,但没有得到预期的结果。你能建议做这个任务吗?提前致谢。

$document_list = array( '01-14-2013', '01-12-2013', '04-05-2016' );
usort($document_list, array($this, "sortByDate"));

function sortByDate($a, $b) {
    return  strcmp($b['createdDate'], $a['createdDate']);
}

当我尝试这段代码时,它得到了错误的输出。

【问题讨论】:

  • 检查link
  • 使用usort($document_list, "sortByDate");

标签: php arrays sorting


【解决方案1】:
$document_list = array( '01-14-2013', '01-12-2013', '04-05-2016' );
usort($document_list, array($this, "sortByDate"));

function sortByDate($a, $b) {
    if(strtotime($b['createdDate'])<strtotime($a['createdDate'])){
        return $a['createdDate'];
    }else{
        return $b['createdDate'];
    }
}

试试这个

【讨论】:

    【解决方案2】:

    对于这种方法,您需要将日期格式和日期转换为时间戳。

    $document_list = array( '14-01-2013', '12-01-2013', '05-04-2016' );
    $document_list= array_map(function($v) {
        return date('Y-m-d', strtotime($v));
    }, $document_list);
    
    function sortByDate($a, $b) {
        return  strtotime($b) - strtotime($a);
    }
    
    usort($document_list, "sortByDate");
    
    $document_list= array_map(function($v) {
        return date('m-d-Y', strtotime($v));
    }, $document_list);
    

    输出

    array(3) {
      [0]=>
      string(10) "04-05-2016"
      [1]=>
      string(10) "01-14-2013"
      [2]=>
      string(10) "01-12-2013"
    }
    

    【讨论】:

    • 但您要更改最终结果中的整个日期格式?我认为数组元素的格式应该保持原样。
    • @mitkosoft。已更新。
    【解决方案3】:

    你可以使用以下方法做一些优雅的事情:(usort:使用用户定义的比较函数按值对数组进行排序

    <?php
         // Sort the multidimensional array
         usort($document_list, "custom_sort");
         // Define the custom sort function
         function custom_sort($a,$b) {
              return $a['some_sub_var']>$b['some_sub_var'];
         }
    ?>
    

    【讨论】:

      【解决方案4】:

      就个人而言,由于日期时间格式的内部冲突,我发现按日期排序数组是一个不可扩展的选项。下面可能无法完全回答问题,但如果使用从数据库中获取的数组可能会有所帮助

      假设在您的表中有一个主自增“id”列,那么您始终可以 ORDER BY id_column DESC。您将收到与按日期排序相同的结果 - 但要快得多。

      如果由于某种原因您不能直接通过 SQL 使用 ORDER BY id DESC,则只需根据您的情况通过these functions 重构 php 中的数组。


      附带说明:要预览您使用上述 php 排序函数的实验,我强烈建议通过我在 php.net 郊区某处找到的 sn-p 来可视化数组显示 -

      function visual_arr($arr){
          echo '<pre>';
          print_r($arr);
          echo  '</pre>';
      }
      

      调用它 - 只需在项目文件的某处使用它:visual_arr ($the_array_you_want_to_display_in_human_radable_format)。显然为您的数组选择一个较短的名称^^

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 2013-03-06
        • 2016-10-15
        • 2020-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        相关资源
        最近更新 更多