2013-03-27 246 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