Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I'm struggling on this one. I have an array that contains countries and regions. I want to sort both sets of information in ascending order on the key.

Here is the array I'm working with:

Array
(
    [Country] => Array
        (
            [United Kingdom] => Array
                (
                    [London] => Array
                        (
                            [0] => 1
                            [1] => 5
                            [2] => 23
                            [3] => 71
                        )

                    [Manchester] => Array
                        (
                            [0] => 800
                        )

                )

            [United States] => Array
                (
                    [New York] => Array
                        (
                            [0] => 147
                            [1] => 111
                        )

                    [Washington] => Array
                        (
                            [0] => 213
                        )

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

                    [Texas] => Array
                        (
                            [0] => 9
                        )

                )

            [Brazil] => Array
                (
                    [Brasília] => Array
                        (
                            [0] => 64
                        )

                )

        )

)

So the reordered array would be:

Brazil
- Brasília

United Kingdom
- London
- Manchester

United States
- Florida
- New York
- Texas
- Washington

The data structure should remain the same, but the order of the number (e.g. London: 1,5,23,71) can stay the same.

I've tried several of the sorting methods from: http://php.net/manual/en/array.sorting.php

But they dont appear to do anything. Maybe because its a multidimensional array or maybe its not structured 100% logically... but I'm stuck with the array as it is.

share|improve this question
Just for clarification purposes: Do you want the UK cities ordered in reverse order (M before L)? Or is that just a typo? – Steve Mar 27 at 20:47
Hi Steve. Apologies, that was indeed a typo. I've corrected it now :) – iltdev Mar 27 at 21:23
add comment (requires an account with 50 reputation)

2 Answers

up vote 0 down vote accepted

Step 1:
Sort the country by key.

ksort($arr['Country']);

Step 2: Loop through the countries and sort those keys.

foreach ($arr['Country'] as $country=>$data) {
    ksort($arr['Country'][$country]);
}
share|improve this answer
Thanks Steve. I've made a couple of slight changes, but that is working a treat for me. Thanks :) – iltdev Mar 27 at 21:38
add comment (requires an account with 50 reputation)

You can try:

ksort_recursive($data);
print_r($data);

Function Used

function ksort_recursive(&$array) {
    ksort($array);
    foreach ( $array as &$a ) {
        is_array($a) && ksort_recursive($a);
    }
}

See Testing on Multiple PHP Versions

share|improve this answer
Thanks Baba. Your answer also works great. I accepted Steve's as it doesn't use a custom function and has fewer lines, but I really appreciate your answer :) – iltdev Mar 27 at 21:39
add comment (requires an account with 50 reputation)

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.