这是未排序的数组,格式为 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 现在排在第一位。我有什么办法可以解决这个简单的问题吗?它应该在数组中的最后一个,因此它在下个月。 (01-05-2014)
Update:
上面是 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);
这些日期的格式不适合排序。您应该以 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;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)