按日期PHP顺序数组?

时间:2011-06-19 09:50:01

标签: php arrays datetime sorting date

  

可能重复:
  PHP Sort a multidimensional array by element containing date

我在PHP数组中有一些来自XML或JSON的数据,如下所示:

[0]= array(2) {
    ["title"]= string(38) "Another title"
    ["date"]= string(31) "Fri, 17 Jun 2011 08:55:57 +0200"
}
[1]= array(2) {
    ["title"]= string(38) "My title"
    ["date"]= string(31) "Mon, 16 Jun 2010 06:55:57 +0200"
}

我想要做的是按日期订购这两件商品。

  1. 当排序值在每个项目中时,是否可以按日期排序?
  2. 我是否需要将日期格式转换为时间戳?
  3. 我不想做的事

    我可以使用日期并将其设置为ID,但感觉不对,因为两个项目可以具有相同的日期,然后它不会是唯一的。

4 个答案:

答案 0 :(得分:75)

您不需要在排序之前将日期转换为时间戳,但这是一个好主意,因为没有它需要更多时间进行排序。

$data = array(
    array(
        "title" => "Another title",
        "date"  => "Fri, 17 Jun 2011 08:55:57 +0200"
    ),
    array(
        "title" => "My title",
        "date"  => "Mon, 16 Jun 2010 06:55:57 +0200"
    )
);

function sortFunction( $a, $b ) {
    return strtotime($a["date"]) - strtotime($b["date"]);
}
usort($data, "sortFunction");
var_dump($data);

答案 1 :(得分:29)

使用usort

usort($array, function($a1, $a2) {
   $v1 = strtotime($a1['date']);
   $v2 = strtotime($a2['date']);
   return $v1 - $v2; // $v2 - $v1 to reverse direction
});

答案 2 :(得分:18)

我建议使用DateTime对象而不是字符串,因为您无法轻松比较排序所需的字符串。使用日期还可以获得额外的优势。

获得DateTime对象后,排序非常简单:

usort($array, function($a, $b) {
  return ($a['date'] < $b['date']) ? -1 : 1;
});

答案 3 :(得分:-2)

他正在考虑将日期作为一个关键,但担心价值会被写在一个上面,我只想表明(可能不那么明显,我编辑的原因)是他仍然可以保持价值不变,没有写在其他上面,这不是没关系吗?!

<?php
 $data['may_1_2002']=
 Array(
 'title_id_32'=>'Good morning', 
 'title_id_21'=>'Blue sky',
 'title_id_3'=>'Summer',
 'date'=>'1 May 2002'
 );

 $data['may_2_2002']=
 Array(
 'title_id_34'=>'Leaves', 
 'title_id_20'=>'Old times',
  'date'=>'2 May   2002 '
 );


 echo '<pre>';
 print_r($data);
?>