我有一组如下所示的时间戳:
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
)
)
答案 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方法,因为它可以处理时区和几种格式。