"Simple" sort a nested array using array_multisort or native PHP functions instead of my own foreach loop

Posted by Ana Ban on Stack Overflow See other posts from Stack Overflow or by Ana Ban
Published on 2012-05-24T06:49:21Z Indexed on 2012/10/13 9:38 UTC
Read the original article Hit count: 354

I have the following array of days of the week, with each day having hours of the day (the whole array represents the schedule of a part-time employee):

Array
    (
        [7] => Array
            (
                [0] => 15
                [1] => 14
                [2] => 13
                [3] => 11
                [4] => 12
                [5] => 10
            )

        [1] => Array
            (
                [0] => 10
                [1] => 13
                [2] => 12
            )

        [6] => Array
            (
                [0] => 14
            )

        [3] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )

    )

and I simply need to:

  1. sort asc each sub-array (2nd dimension) - no need to maintain the numeric keys, values are integers
  2. sort asc the 1st dimension and maintain the numeric, integer keys

ie:

Array
    (
        [1] => Array
            (
                [0] => 10
                [1] => 12
                [2] => 13
            )

        [3] => Array
            (
                [0] => 4
                [1] => 5
                [2] => 6
            )

        [6] => Array
            (
                [0] => 14
            )

        [7] => Array
            (
                [0] => 10
                [1] => 11
                [2] => 12
                [3] => 13
                [4] => 14
                [5] => 15
            )

    )

Additional info:

  1. only the keys of the 1st dimension and the values of the 2nd dimension (and of course their association) are meaningful to my use-case
  2. the 1st dimension can have at most 7 values, ranging from 1-7 (days of the week), and will have at least 1 value (1 day)
  3. the 2nd dimension can have at most 24 values, ranging from 0-23 (hours of each day), and will have at least 1 value (1 hour per day)

I know I can do this with a foreach on the whole ksorted array and sort each 2nd dimension array:

ksort($sched);
foreach ($sched as &$array) sort($array);
unset($array);

but I was hoping I could achieve this with native php array function(s) instead.

My search led me to try array_multisort(array_values($array), array_keys($array), $array) but I just can't make it work.

© Stack Overflow or respective owner

Related posts about php

Related posts about function