用时间戳排序数组?

时间:2012-11-20 09:17:06

标签: php arrays date sorting timestamp

我有一组如下所示的时间戳:

2012-11-19 19:45

我需要按日期对它们进行排序。如果我能得到一个日期的unix时间戳,我可以做冒泡排序或其他什么,但我不知道是什么功能给了我。我看了strtotime但它不会让我通过日期格式。我也不确定冒泡排序是最好的方法。

有什么建议吗?

数组示例:

另外,对不起,我应该提到它是'show_date'。

Array
(
    [15] => Array
        (
            [show_date] => 2012-11-19 10:40
        )

    [16] => Array
        (
            [show_date] => 2012-11-20 10:40
        )

    [17] => Array
        (
            [show_date] => 2012-11-21 10:40
        )

    [18] => Array
        (
            [show_date] => 2012-11-22 10:40
        )

)

4 个答案:

答案 0 :(得分:3)

无需过度复杂化。只需使用内置的sort函数:

sort($timestamp_array);

您不需要转换为UNIX时间戳,因为字符串采用标准的“ISO可排序日期”格式。这意味着如果您对字符串进行排序,则日期将是正确的顺序。

这是一个php -a会话,展示了它的工作原理:

php > $ts = array('1986-01-31 12:11', '2012-01-01 13:12', '1980-10-10 12:00');
php > sort($ts);
php > echo var_export($ts);
array (
  0 => '1980-10-10 12:00',
  1 => '1986-01-31 12:11',
  2 => '2012-01-01 13:12',
)

答案 1 :(得分:1)

您可以使用PHP标准排序对其进行排序。见Sorting Arrays

asort($timestamps);

对于您的示例,您可以定义比较函数

function cmp_show_date($a, $b)
{
    if ($a['show_date'] == $b['show_date']) {
        return 0;
    }

    return ($a['show_date'] < $b['show_date']) ? -1 : 1;
}

并在usort

中使用它
usort($timestamps, 'cmp_show_date');

答案 2 :(得分:0)

您不需要日期格式来传递该特定日期。当您传递strtotime('2012-11-19 19:45');时,它将返回UNIX时间戳。

修改

$arr = array();
foreach ($dates as $k => $v) {
    $arr[$k]  = strtotime($v['date']);//or $k if your date is the index
}

array_multisort($arr, SORT_ASC, $dates);

答案 3 :(得分:0)

您可以使用usort()和strtotime的组合,但我宁愿使用DateTime类及其getTimestamp方法,因为它可以处理时区和几种格式。