PHP按其部分元素排序数组

时间:2014-08-19 08:53:09

标签: php arrays sorting

我有一个数组:

  '491-200' => string '13/03/2014 - Home(08:45  -  17:00)'
  '494-202' => string '12/03/2014 - Restaurant(08:45  -  17:00)'
  '498-200' => string '06/03/2014 - Cinema(08:45  -  17:00)'
  '493-204' => string '05/03/2014 - Shop(08:45  -  17:00)'
  '493-202' => string '26/02/2014 - Home(08:45  -  17:00)'

我需要按日期对其进行排序...我尝试使用explode()从字符串中提取日期,将其转换并使用asortksort,{{ 1}},arsortkrsort等,但无法正确排序。看起来很有希望的usort按照自己的方式对其进行排序,我甚至无法向自己解释......

usort

结果:

    function cmp($x, $y)
{
$a = strtotime(explode("-", $x, 2)[0]);
$b = strtotime(explode("-", $y, 2)[0]);


    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

请帮助!

由于

1 个答案:

答案 0 :(得分:3)

strtotime不能神奇地解析你抛出的任何和所有日期格式;它不知道xx/xx/xxxx代表dd/mm/yyyy。您需要创建时间戳以进行更明确的比较:

$a = DateTime::createFromFormat('d/m/Y', explode(' -', $x, 2)[0])->getTimestamp();