这是未排序的数组,格式为dd-mm-yyyy:
array(6) {
["7-0"]=> string(10) "28-04-2014"
["7-1"]=> string(10) "29-04-2014"
["7-2"]=> string(10) "30-04-2014"
["7-3"]=> string(10) "01-05-2014"
["7-5"]=> string(10) "26-04-2014"
["7-6"]=> string(10) "27-04-2014"
}
我现在正在使用排序:
array(6) {
["7-3"]=> string(10) "01-05-2014"
["7-5"]=> string(10) "26-04-2014"
["7-6"]=> string(10) "27-04-2014"
["7-0"]=> string(10) "28-04-2014"
["7-1"]=> string(10) "29-04-2014"
["7-2"]=> string(10) "30-04-2014"
}
通过使用asort()按值对数组进行排序,但是现在首先是01。有什么办法让我解决这个简单的方法吗?它应该是数组中的最后一个,因此它在下个月。 (2014年1月5日)
更新
上面是asort()之前和之后的var_dump()响应。以下是代码段。在不同的尝试之后,asort()一直工作到本周大约在月末 - 然后数组没有正确排序。
$openhours_select = array();
foreach($openhours as $oh)
{
$d = date('d-m-Y', strtotime('this ' . $days[$oh['fromDay']]));
$openhours_select[$oh['id']] =$d;
}
asort($openhours_select);
答案 0 :(得分:4)
这些日期的排序格式不佳。您应该以ISO-8601格式存储日期,这些格式易于排序,然后在需要时重新格式化。
但要解决此问题,您可以使用DateTime::createFromFormat()
将日期读入可比较的格式,然后对其进行排序。
uasort($openhours_select, function($a, $b) {
$date1 = DateTime::createFromFormat('d-m-Y', $a);
$date2 = DateTime::createFromFormat('d-m-Y', $b);
return $date1 > $date2;
});
答案 1 :(得分:1)