PHP sort array alphabetically

10,245

Solution 1

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]);
}

Solution 2

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:
10,245
iltdev
Author by

iltdev

Updated on July 13, 2022

Comments

  • iltdev
    iltdev almost 2 years

    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.