【问题标题】:sorting date associative array [duplicate]排序日期关联数组
【发布时间】:2012-10-17 01:17:27
【问题描述】:

可能重复:
Sorting an associative array in PHP

我有这个数组

array
  0 => 
    array
      'start_date' => string '2012-11-14' (length=10)
      'end_date' => string '2012-11-19' (length=10)
  1 => 
    array
      'start_date' => string '1980-10-10' (length=10)
      'end_date' => string '1980-10-10' (length=10)
  2 => 
    array
      'start_date' => string '2012-11-20' (length=10)
      'end_date' => string '2099-10-10' (length=10)

我想在 start_date 对它进行排序。我不认为 sort() 方法适用于它。有什么想法吗?

【问题讨论】:

标签: php


【解决方案1】:

你可以使用usort

PHP 5.3+

usort($array, function($a, $b) {
   //return strtotime($a['start_date']) - strtotime($b['start_date']);
   return strcmp($a['start_date'], $b['start_date']);
});

旧版本的 PHP

function startDateCmp($a, $b) {
   //return strtotime($a['start_date']) - strtotime($b['start_date']);
   return strcmp($a['start_date']), $b['start_date']);
}

usort($array, 'startDateCmp');

【讨论】:

  • 其实php 5.3引入了匿名函数
  • 在这种特殊情况下,strtotime 是多余的。日期已经是可以直接排序的字符串格式。但否则是的,您必须在比较之前转换为时间戳。
  • @MarcB,我喜欢谨慎行事,但你是对的 :)
  • @MarcB 假设某些日期的格式是“2012-05-01”而不是“2012-5-1”,你是对的。
【解决方案2】:

使用usort 并提供您自己的函数来进行排序。

function cmp($a, $b)
{
    return $b['start_date'], $a['start_date'];
}

usort($array, "cmp");

【讨论】:

    猜你喜欢
    • 2021-01-11
    • 1970-01-01
    • 2013-04-23
    • 2017-06-13
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多