2013-03-27 244 views
4

我在这个上挣扎。我有一个包含国家和地区的数组。我想按升序对密钥中的两组信息进行排序。按字母顺序排列PHP排序

这是我的工作数组:

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%结构......但是我仍然坚持使用这个数组。

+0

只是为了澄清的目的:你想在反向下令英国城市订单(L之前的M)?或者这只是一个错字? – Steve 2013-03-27 20:47:31

+0

嗨,史蒂夫。道歉,这确实是一个错字。我已经纠正它现在:) – iltdev 2013-03-27 21:23:55

回答

1

第1步:
按键排序国家。

ksort($arr['Country']); 

第2步:遍历国家和排序这些键。

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

谢谢史蒂夫。我做了一些小改动,但这对我来说是一种享受。谢谢:) – iltdev 2013-03-27 21:38:19

3

你可以试试:

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

功能用于

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

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

+0

谢谢巴巴。你的答案也很好。我接受了史蒂夫的作品,因为它不使用自定义功能,行数也较少,但我真的很感谢你的回答:) – iltdev 2013-03-27 21:39:37