【问题标题】:Can't sort dates with PHP [duplicate]无法使用 PHP 对日期进行排序 [重复]
【发布时间】:2013-05-04 03:02:41
【问题描述】:

我有一个如下所示的 PHP 数组:

$dates = array();
$dates['01-07-2013'] = 'dummy data';
$dates['01-21-2013'] = 'dummy data';
$dates['01-28-2013'] = 'dummy data';
$dates['01-20-2012'] = 'dummy data';

当使用 ksort($dates) 时,它们没有正确排序。有没有办法像这样对键进行排序?

我希望排序返回:

'01-30-2012',
'01-07-2013',
'01-21-2013',
'01-28-2013',

【问题讨论】:

  • 你试过flag SORT_STRING吗?喜欢ksort($dates, SORT_STRING);

标签: php sorting


【解决方案1】:

你可以使用 uksort 但在比较函数中看起来像这样:

function sort_func($date1, $date2){
    return strtotime(str_replace("-","/", $date1)) - strtotime(str_replace("-","/", $date2));
}

uksort($dates, "sort_func");

【讨论】:

    【解决方案2】:

    ksort 默认排序类型为SORT_REGULAR

    SORT_REGULAR - 正常比较项目(不要更改类型)

    您的日期格式将在 PHP 中评估为通用字符串。

    您需要对它们进行格式化,以便将它们按字符串排序。

    【讨论】:

      【解决方案3】:
      $dates = array();
      $dates[time()] = 'dummy data';
      

      转换为 unix 时间戳可能会有所帮助,因为它只是一个可以轻松排序的数字(整数)。

      【讨论】:

        【解决方案4】:

        就 PHP 而言,这些不是日期。它们是字符串,所以它对它应用标准的字符串排序规则。

        您需要定义用于usort() 的自定义排序函数,或将这些日期转换为可作为字符串排序的格式,例如

        yyyy-mm-dd
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-05
          • 1970-01-01
          • 2017-02-23
          • 2015-02-25
          • 2013-04-01
          • 2017-07-16
          • 1970-01-01
          相关资源
          最近更新 更多