1

I'm making an event calendar. Everything needs to be sorted chronologically.

This is the array I'm currently sorting:

$years = array(
    2018 => array(
        01 => array(),
        02 => array()
    ),
    2017 => array(,
        02 => array()
        01 => array()
    )
);

I originally have a larger array used to populate this $years.

Using ksort, I've sorted my years correctly, i.e. they are in chronological order. However, I can't sort my third level (see in 2017, my array is 02,01 whereas it should read 01,02). The last level or the array (such as 2017 > 02) is sorted correctly, this is not an issue, as these are sorted by content within each of them.

I've tried array_multisort, ksort, usort and simply sort but none allow me to sort my keys as they are numeric.

0

2 Answers 2

3

How about iterating through the children elements, sorting them with ksort() as well:

<?php
$years = array(
    2018 => array(
        01 => array(),
        02 => array()
    ),
    2017 => array(
        02 => array(),
        01 => array()
    )
);
ksort($years);
foreach ($years as &$year) {
    ksort($year);
}
var_dump($years);

Demo

Sign up to request clarification or add additional context in comments.

3 Comments

Oh, okay, I see my issue here, the use of & before my $year solves it. It's a bit too quick to mark the answer as accepted. May I ask what the & character does in this scenario?
It's using the element as a reference. This means, it will modify the actual $year array instead of simply returning a modified copy. Read about this here
Glad I could help!
2

Hope this one will be helpful. Here we are using ksort for sorting array on the basis of keys.

Try this code snippet here

ksort($years);
$result=array_map(
  function($array)  {
       ksort($array);
       return $array;
  },
  $years);

2 Comments

Since this does solve the issue, I've upvoted. However, I have used ishegg's answer, therefore I will be marking that answer as the solution. Thanks for your input!
@Akintunde Oh Thanks, Good to here this.. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.