使用 asort() 对包含日期的数组进行排序无法正常工作

2024-01-23

这是未排序的数组,格式为 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(使用前将#替换为@)

使用 asort() 对包含日期的数组进行排序无法正常工作 的相关文章

随机推荐