6

我有一组看起来像这样的时间戳:

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

4 回答 4

4

无需过于复杂。只需使用内置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',
)
于 2012-11-20T09:19:02.030 回答
1

您可以使用 PHP 标准排序对其进行排序。请参阅排序数组

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');
于 2012-11-20T09:19:55.850 回答
0

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

于 2012-11-20T09:20:51.947 回答
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);
于 2012-11-20T09:18:54.953 回答