2012-11-28 14 views
2

我有一個包含以下數據一個非常大的數組:排序一個很大的多維數組

Array 
(
    [2] => Array 
     (
      [Berlin] => Array 
       (
        [1] => Array 
         (
          [0] => stdClass Object 
           (
            [name] => Joe 
            [car_name] => Audi 
            [car_color] => Black 
            [sid] => 130 
           ) 
          [1] => stdClass Object 
           (
            [name] => Mark 
            [car_name] => BMW 
            [car_color] => Red 
            [sid] => 135 
           ) 
         ) 
        [0] => Array 
         (
          [0] => stdClass Object 
           (
            [name] => Lucas 
            [car_name] => Audi 
            [car_color] => Yellow 
            [sid] => 168 
           ) 
          [1] => stdClass Object 
           (
            [name] => Joe 
            [car_name] => Volkswagen 
            [car_color] => Black 
            [sid] => 170 
           ) 
          [2] => stdClass Object 
           (
            [name] => Thomas 
            [car_name] => Ford 
            [car_color] => Gray 
            [sid] => 119 
           ) 
         ) 
       ) 
      [Moscow] => Array 
       (
        [1] => Array 
         (
          [0] => stdClass Object 
           (
            [name] => Matt 
            [car_name] => Mustang 
            [car_color] => Black 
            [sid] => 230 
           ) 
          [1] => stdClass Object 
           (
            [name] => Suze 
            [car_name] => Lada 
            [car_color] => Red 
            [sid] => 245 
           ) 
         ) 
        [0] => Array 
         (
          [0] => stdClass Object 
           (
            [name] => Lucas 
            [car_name] => Unknown 
            [car_color] => Brown 
            [sid] => 374 
           ) 
          [1] => stdClass Object 
           (
            [name] => Mathew 
            [car_name] => Volkswagen 
            [car_color] => Blue 
            [sid] => 589 
           ) 
          [2] => stdClass Object 
           (
            [name] => Thomas 
            [car_name] => Ford 
            [car_color] => Light Blue 
            [sid] => 741 
           ) 
         ) 
       ) 
     ) 
) 

現在,我想這樣的排序呢(請閱讀//線):

Array 
(
    [2] => Array //from min to max - eg. from 0 to 50 
     (
      [Berlin] => Array //alphabetically from A to Z 
       (
        [1] => Array //from min to max eg. from 0 to 1 
         (
         ) 
       ) 
     ) 
) 

我怎樣才能在PHP中實現這一點?我希望我很清楚,隨時在評論中詢問更多信息。

回答

5

會是這樣的:

// ksort sorts the keys low to high 

ksort($array[2]); 

// uksort w/ natsort is a full alphanumeric sorting A-Z0-9 
uksort($array[2]['Berlin'], 'natsort'); 

ksort($array[2]['Berlin'][1]); 

的陣列和陣列功能文檔:

http://us3.php.net/manual/en/book.array.php

功能實例

這個例子是真正具體到你的榜樣;然而,如果你的數組結構是真正動態的,你可以做一個遞歸樣式函數。

$BigArray = array(); 

//Sorting the initial array index 
ksort($BigArray); 

foreach($BigArray as $a) 
{ 
    // Sorting Berlin/Moscow here.. 
    uksort($a, 'natsort'); 
    foreach($a as $b) 
    { 
     // Sorting the index inside the cities 
     ksort($b); 
    } 
} 
+0

謝謝您的回覆。不幸的是,'natsort($ a)'這一行會引發一個通知:'遇到一個PHP錯誤。消息:數組到字符串轉換。 – Scott

+0

@Scott,Doh!愚蠢的錯誤。查看我的編輯。 'natsort'在值上工作,但是你可以使用'uksort'並添加一個比較函數。 – phpisuber01

+0

現在的另一個警告; '警告:natsort()期望只有1個參數,2給出'。 – Scott

1

最簡潔的方法是使用遞歸函數。這也將允許您在代碼中的其他位置使用不同維度的數組。

function SortArray($arr) { 
    if(!is_array($InnerArray)) 
     return; 
    foreach($arr as $InnerArray) { 
     SortArray($InnerArray); 
    } 
    ksort($arr); 
} 
SortArray($array);