我想按时间顺序排列这个数组:
$ta = array (
0 => '20/05/2012',
1 => '08/01/2011',
2 => '23/10/2010',
3 => '27/07/2013',
4 => '28/01/2011',
5 => '21/10/2010',
5 => '18/07/2013',
);
function comp2($a, $b) {
if ($a == $b)
return 0;
return ($a < $b) ? 1 : -1;
};
usort($ta,'comp2');
返回:
Array
(
[0] => 28/01/2011
[1] => 27/07/2013
[2] => 23/10/2010
[3] => 20/05/2012
[4] => 18/07/2013
[5] => 08/01/2011
)
我在更改为strtotime
后无法使用mm/dd/yyyy
转换日期。
答案 0 :(得分:3)
您可以像{/ p>一样使用usort
usort($ta,function($a,$b){
return strtotime(str_replace('/', '-', $a)) - strtotime(str_replace('/', '-', $b));
});
简要说明:
这里的日期结构是美国日期格式m/d/Y
。因此需要首先替换为欧洲日期格式,即d-m-y
。您可以查看this答案,以便将PHP日期转换为strtotime。
答案 1 :(得分:0)
将它们排序为字符串将无法正常工作,因为它将按字母顺序排序。 1988年1月1日将在2015年12月的最后一天之前到来,因为它从第一个角色开始 - 日子。
所以你必须将字符串转换为日期。这里的问题是strtotime()
不接受dd/mm/YYYY
格式。使用this解决方法,您将获得以下代码:
function comp2($a, $b) {
$x = toDate($a);
$y = toDate($b);
if ($x == $y) return 0;
return ($x < $y) ? 1 : -1;
}
function toDate($d) {
return strtotime(str_replace('/', '-', $d));
}
如果你有很多日期要排序,但这不是很有效。相同的日期将与多个日期进行比较,因此会多次转换。那是浪费资源。因此,如果性能是一个问题,请循环遍历数组,转换所有日期,然后使用sort()
对其进行排序。之后,您可以使用date()
转换回您想要的任何格式。