0

How can I reorganize an array by date so that all of the dates will be in order by whichever date came first when I use foreach() ?

Here is my array:

$events = array(
"03/06/2016" => array("Random Data 1","Random Data 2"),
"02/15/2016" => array("Random Data 1","Random Data 2"),
"03/07/2016" => array("Random Data 1","Random Data 2")
);
Matt
  • 1,087
  • 1
  • 12
  • 28

4 Answers4

2

To sort on date's, you should format them as Y-m-d. example: 2016-03-06.

Then use the function ksort() to sort the array on key values.

$events = array(
"2016/03/06" => array("Random Data 1","Random Data 2"),
"2016/02/15" => array("Random Data 1","Random Data 2"),
"2016/03/07" => array("Random Data 1","Random Data 2"),
"2015/04/02" => array("Random Data 1","Random Data 2"),
"2015/05/02" => array("Random Data 1","Random Data 2")
);

var_dump($events);
ksort($events);
var_dump($events);

For date formatting see: http://php.net/manual/en/function.date.php

For all functions to sort array's see: http://php.net/manual/en/array.sorting.php

Fin
  • 386
  • 1
  • 15
1

I'd do something like that :

//objectify & reverse
foreach($arr as $key=>$var) {
   $arr2[$var]=new DateTime(substr($key,6,4).'-'.substr($key,0,2).'-'.substr($key,3,2));
}

//sort
asort($arr2);

//re-reverse & format
foreach($arr2 as $key=>$var) {
   $var=date_format($var,'m-d-Y');
   $arr3[$var]=$key;
}

//read
foreach($arr3 as $key=>$var) {
   echo $key.': '.$var;
}
St3an
  • 726
  • 1
  • 6
  • 21
1

We are going to do this in two steps:

  • Reformat the array keys
  • Sort the array

Let's code!

// Define array
$events = array(
    "03/06/2016" => array("Random Data 1","Random Data 2"),
    "02/15/2016" => array("Random Data 1","Random Data 2"),
    "03/07/2016" => array("Random Data 1","Random Data 2")
);

// New array
$sortedEvents = array();

// Change key date format
foreach ($events as $date => $randomDates) {
    $date = DateTime::createFromFormat('m/d/Y', $date);
    $sortedEvents[$date->format('Ymd')] = $randomDates;
}

// Sort new array
ksort($sortedEvents);

// Output array
var_dump($sortedEvents);
Peter
  • 8,776
  • 6
  • 62
  • 95
-1

You need to run ksort:

$aTmp                  = array();
$aTmp[ '03/06/2016' ] = '2ttt3t23t2t2';
$aTmp[ '02/15/2016' ] = '2ttt3t23t2t2';
$aTmp[ '03/07/2016' ] = '2ttt3t23t2t2';
var_dump( $aTmp );
ksort( $aTmp );
var_dump( $aTmp );

http://php.net/manual/en/function.ksort.php

Vladimir Ramik
  • 1,920
  • 2
  • 13
  • 23