PHP按字母顺序排序

时间:2013-03-27 20:43:29

标签: php multidimensional-array sorting asort

我在这个问题上挣扎。我有一个包含国家和地区的数组。我想按键在升序中对两组信息进行排序。

这是我正在使用的数组:

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
                        )

                )

        )

)

所以重新排序的数组将是:

巴西
- 巴西利亚

英国
- 伦敦
- 曼彻斯特

美国
- 佛罗里达州 - 纽约
- 德克萨斯州 - 华盛顿

数据结构应该保持不变,但数字的顺序(例如伦敦:1,5,23,71)可以保持不变。

我尝试过以下几种排序方法: http://php.net/manual/en/array.sorting.php

但他们似乎没有做任何事情。也许是因为它是一个多维数组,或者它的逻辑结构不是100%...但我仍然坚持使用数组。

2 个答案:

答案 0 :(得分:3)

您可以尝试:

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

使用的功能

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

请参阅在多个PHP版本上测试

答案 1 :(得分:1)

步骤1:
按键对国家排序。

ksort($arr['Country']);

第2步:遍历各个国家/地区并对这些密钥进行排序。

foreach ($arr['Country'] as $country=>$data) {
    ksort($arr['Country'][$country]);
}