1

I have array like below, how to sort data with a combination of date and time descending?

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

Expected result:

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

Thanks For Help

Abu Ayyub
  • 369
  • 3
  • 14

4 Answers4

2
$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;
});
barbsan
  • 3,238
  • 11
  • 18
  • 27
Sayed Mohd Ali
  • 2,004
  • 3
  • 8
  • 25
2

I solved my self, i am using

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

Thanks for all to helping me.

Abu Ayyub
  • 369
  • 3
  • 14
  • 1
    You can mark your's answer as accepted so it will shown this issue has been resolve (or other answer if you prefer any) – dWinder Feb 24 '19 at 17:34
1

You can use rsort() which will sort the array in descending order.

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

Output:

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
        )

)
Danish Shaikh
  • 356
  • 1
  • 9
1

How about array-multisort?

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

Simple as that

dWinder
  • 11,359
  • 3
  • 19
  • 33