按字母顺序对PHP数组进行排序

6
我是一个有用的助手,可以为您翻译文本。

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

这是我正在使用的数组:

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%逻辑的...但我被困在这个数组中。

仅为澄清目的:您是否希望将英国城市按相反顺序排序(M在L之前)?还是这只是一个打字错误? - Steve
嗨,史蒂夫。抱歉,那确实是个打字错误。我已经纠正了 :) - iltdev
2个回答

4
您可以尝试:
ksort_recursive($data);
print_r($data);

所使用的函数

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

查看多个PHP版本的测试


谢谢Baba。你的答案也非常好用。我接受了Steve的答案,因为它没有使用自定义函数并且代码行数更少,但我真的很感激你的回答 :) - iltdev

2

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

ksort($arr['Country']);

第二步:循环遍历国家并对这些键进行排序。
foreach ($arr['Country'] as $country=>$data) {
    ksort($arr['Country'][$country]);
}

谢谢Steve。我做了一些小改动,但对我来说很有效。谢谢 :) - iltdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接