我怎样才能在php中按时间顺序对这个数组进行排序?

时间:2014-03-10 15:41:28

标签: php sorting

我有一个日期数组,如下所示:

  $array = array(
     "20140101000000" => "January 2014",
     "20140201000000" => "February 2014",
     "20140301000000" => "Mars 2014",
     "20130401000000" => "April 2013", // 2013 starts here
     "20130501000000" => "May 2013",
     "20130601000000" => "June 2013",
     "20130701000000" => "July 2013",
     "20130801000000" => "August 2013",
     "20130901000000" => "September 2013",
     "20131001000000" => "October 2013",
     "20131101000000" => "November 2013",
     "20131201000000" => "December 2013",
  );

我希望它按时间顺序排序,下降,我不知道如何实现这一目标。此数组的内容是从当前月份开始的12个月和向后的时间。此外,通过API接收数组,因此我无法控制输出。

基本上我希望它以这种格式排序:

Mars 2014, 
February 2014, 
January 2014, 
December 2013
April 2013

3 个答案:

答案 0 :(得分:3)

键与值有关并且易于排序,因此这应该有效:

krsort($array);

答案 1 :(得分:2)

由于键是数值,您只需使用ksort - http://www.php.net/manual/en/function.ksort.php

ksort($array);
var_dump($array);

krsort执行相反的操作 - http://www.php.net/manual/en/function.krsort.php

答案 2 :(得分:1)

首先,您的阵列存在问题,大多数项目共享密钥。因此,一旦评估该数组将是

$array = array( 
      "20140301000000" => "Mars 2014",
      "20130301000000" => "December 2013"
);

哪个不会有帮助。每个项目都必须有一个唯一的密钥。

如果你只看数组的值,假设:

$array = array(
 "January 2014",
 "February 2014",
 "Mars 2014",
 "April 2013", // 2013 starts here
 "May 2013",
 "June 2013",
 "July 2013",
 "August 2013",
 "September 2013",
 "October 2013",
 "November 2013",
 "December 2013",
);

然后,您可以使用用户定义的排序例程,例如

function cmp($a, $b)
{
    if (strtotime($a) == strtotime($b)) {
        return 0;
    }
    return (strtotime($a) > strtotime($b)) ? -1 : 1;

}

usort($array, "cmp");

有关usort

的详情,请参阅此处http://uk1.php.net/manual/en/function.usort.php

或者,如果您的密钥是与您可以使用krsort的日期相对应的唯一时间戳。

krsort($array)