PHP按日期排序数组



可能重复:
PHP按包含日期的元素对多维数组进行排序

我在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. 我需要将日期格式转换为时间戳吗

我不想做什么

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

您不需要在排序前将日期转换为时间戳,但这是一个好主意,因为如果不执行此步骤,排序将花费更多时间。

$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);

更新

在较新的PHP版本中,您也可以使用箭头函数。在这里你可以找到上面的一个更简洁的版本:

usort($data, fn ($a, $b) => strtotime($a["date"]) - strtotime($b["date"]));

使用usort:

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

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

一旦你有了DateTime对象,排序就很容易了:

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

他曾考虑将日期作为关键字,但担心值会一个写在另一个上面,我只想展示(也许不是那么明显,这就是我编辑的原因),他仍然可以保持值的完整性,而不是一个写一个,这没关系吗?!

<?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);
?>

相关内容

  • 没有找到相关文章

最新更新