Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP按日期排序数组?_Php_Arrays_Datetime_Sorting_Date - Fatal编程技术网

PHP按日期排序数组?

PHP按日期排序数组?,php,arrays,datetime,sorting,date,Php,Arrays,Datetime,Sorting,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 20

可能重复:

我在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"
}
我想做的是按日期订购这两件商品。

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

    我可以使用date并将其设置为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"]));
    

    我建议使用DateTime对象而不是字符串,因为您无法轻松比较排序所需的字符串。你还可以从约会中获得额外的好处

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

    usort($array, function($a, $b) {
      return ($a['date'] < $b['date']) ? -1 : 1;
    });
    
    usort($array,function($a,$b){
    报税表($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);
    ?>
    
    
    
    看看这篇文章的第一个答案:非常直接、清晰的答案。谢谢。答案很清楚,但如果两个日期相等,这将丢失值。这不是真的,为什么会这样?他们会紧跟在一起。这个版本呢<代码>usort($sortArray,function($a,$b){返回strcmp($a['article\u created\u date'],$b['article\u created\u date']);})
    <?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);
    ?>