2012-08-01 67 views
0

我有一個沒有排序的城鎮數組。我想按照省份的[類別] [3]和地區的[類別] [0]進行排序,並顯示每個分組省及其地區,然後顯示其下的城鎮。所以,下面的數組:php數組排序和分組

Array 
(
    [0] => Array 
     (
      [name] => Name One 
      [id] => 1 
      [link] => http://mylink1.com 
      [category] => Array 
       (
        [0] => Region 1 
        [1] => Town 7 
        [2] => Country 
        [3] => Province 2 
       )  
     ) 

    [1] => Array 
     (
      [name] => Name Two 
      [id] => 2 
      [link] => http://mylink2.com 
      [category] => Array 
       (
        [0] => Region 1 
        [1] => Town 
        [2] => Country 
        [3] => Province 3 
       )  
     ) 

    [2] => Array 
     (
      [[name] => Name Three 
      [id] => 3 
      [link] => http://mylink3.com 
      [category] => Array 
       (
        [0] => Region 1 
        [1] => Town 5 
        [2] => Country 
        [3] => Province 2 
       ) 
     ) 

    [6] => Array 
     (
      [name] => Name Four 
      [id] => 4 
      [link] => http://mylink4.com 
      [category] => Array 
       (
        [0] => Region 1 
        [1] => Town 1 
        [2] => Country 
        [3] => Province 1 
       ) 
     ) 

) 

...應該結束這樣看:

Country (all the same) 

Province 1 
- Region 1 
- - Town 1 name, id, link 

Province 2 
- Region 1 
- - Town 5 name, id, link 
- - Town 7 name, id, link 

Province 3 
- Region 1 
- - Town 1 name, id, link 

省是主要分組因素,然後按地區分類,沒有特定的順序的城鎮,但我猜按字母順序是有道理的。

我設法按照類別使用此引用對數組進行排序:Sort Multi-dimensional Array by Value但無法想象如何進一步排序,而無需使用名稱在循環中專門引用省。即

/// shortened version.. 
foreach($array as $key=>$value)... 
    if($value == "Province 1") : do something here with these matches 
    ... etc 

任何幫助,將不勝感激。

+1

寫一個比較函數,並用'usort()'http://php.net/manual/en/function.usort.php – alfasin 2012-08-01 22:34:46

回答

0

我不認爲你可以一步到位做到這一點。

您可以將自己的價值觀是這樣的:

$grouped = array(); 

foreach ($data as $group) 
{ 
    $grouped[ $group['category'][3] ][ $group['category'][0] ][ $group['category'][1] ] = array(/* ... */); 
} 

但你還是要每個數組排序(和它的子陣列)使用ksort()

你應該檢查一下,你是否可以得到預先分類好的值。例如,如果您使用數據庫來檢索這些值,那麼在數據庫中對它們進行排序並將它們帶入您的PHP代碼中的正確(分組)結構將會非常簡單。

+0

...不完全是我所採取的,但絕對是最接近的 - 這不能一步完成,使用任何排序功能,然後變得毫無用處。通過遍歷數組完成分組,然後輸出這些組的結果。 – Innate 2012-08-03 09:37:56

0

在數組中循環我已經使用了我正在查找的類別的開關,然後爲每個組構建了另一個數組。從那裏,我可以按地區排序:

foreach($arr as $town){        
    switch($town['blogcats']){         
     case "Province 1" : $province1[] = $town; 
     break; 
     case... 
     etc 
    } 
} 

然後每一個新的組合陣列可以輸出:

foreach($province1 as $eachtown) { 
    echo $newtown['name']; 
    ... and so forth. 
} 

在第二循環排序可以對本地區進行。 每個省都在我的頁面上的列表中手動引用,這也使我可以控制位置。

無論如何,這個答案也可以改善...但上述工作沒有太多的努力。