【问题标题】:Sorting array data with a combine date and time in php在php中使用组合日期和时间对数组数据进行排序
【发布时间】:2019-02-21 06:47:52
【问题描述】:

我有如下数组,如何结合日期和时间降序对数据进行排序?

$manifest = array(
    array("date"=>2019-02-21,"time"=>04:49:54,"desc"=>"arrived in indonesia"),
    array("date"=>2019-02-25,"time"=>04:02:21,"desc"=>"arrived in soppeng"),
    array("date"=>2019-02-22,"time"=>01:42:51,"desc"=>"arrived in makassar"),
    array("date"=>2019-02-22,"time"=>02:42:51,"desc"=>"arrived in makassar gateway"),
);

预期结果:

$manifest = array(
    array("date"=>2019-02-25,"time"=>04:02:21,"desc"=>"arrived in soppeng"),
    array("date"=>2019-02-22,"time"=>02:42:51,"desc"=>"arrived in makassar gateway"),
    array("date"=>2019-02-22,"time"=>01:42:51,"desc"=>"arrived in makassar"),
    array("date"=>2019-02-21,"time"=>04:49:54,"desc"=>"arrived in indonesia")
    );

感谢帮助

【问题讨论】:

标签: php arrays sorting multidimensional-array


【解决方案1】:
$arr = $manifest;

usort($arr, function($a, $b) {
  $ad = new DateTime($a['date'] ." ". $a['time']);
  $bd = new DateTime($b['date']." ". $a['time']);

  if ($ad == $bd) {
    return 0;
  }

  return $ad < $bd ? 1 : -1;
});

【讨论】:

    【解决方案2】:

    我解决了我自己,我正在使用

    usort($manifest,function($a,$b){
       return strtotime($b['date']." ".$b['time']) - strtotime($a['date']." ".$a['time']);
    });
    

    感谢大家帮助我。

    【讨论】:

    • 您可以将您的答案标记为已接受,以便显示此问题已解决(或其他答案,如果您愿意的话)
    【解决方案3】:

    您可以使用rsort(),它将按降序对数组进行排序。

    <?php
    $manifest = array(
      array("date"=>"2019-02-21","time"=>"04:49:54","desc"=>"arrived in indonesia"),
      array("date"=>"2019-02-25","time"=>"04:02:21","desc"=>"arrived in soppeng"),
      array("date"=>"2019-02-22","time"=>"01:42:51","desc"=>"arrived in makassar"),
      array("date"=>"2019-02-22","time"=>"02:42:51","desc"=>"arrived in makassar gateway")
    );
    
    rsort($manifest);
    
    echo '<pre>';print_r($manifest);echo '</pre>';
    ?>
    

    输出:

    Array
    (
        [0] => Array
            (
                [date] => 2019-02-25
                [time] => 04:02:21
                [desc] => arrived in soppeng
            )
    
        [1] => Array
            (
                [date] => 2019-02-22
                [time] => 02:42:51
                [desc] => arrived in makassar gateway
            )
    
        [2] => Array
            (
                [date] => 2019-02-22
                [time] => 01:42:51
                [desc] => arrived in makassar
            )
    
        [3] => Array
            (
                [date] => 2019-02-21
                [time] => 04:49:54
                [desc] => arrived in indonesia
            )
    
    )
    

    【讨论】:

      【解决方案4】:

      array-multisort怎么样?

      array_multisort(array_column($manifest, 'date'), SORT_DESC, array_column($manifest, 'time'), SORT_DESC, $manifest);
      

      就这么简单

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 2017-03-20
        • 2010-10-10
        相关资源
        最近更新 更多