2012-05-08 86 views
0

我想通過內部值的非標準排序對數組進行排序,但是當其他值相等時,保留它們的順序。所以我這樣做:多維數組挑戰

$articles[0]['name']='Article 1'; 
$articles[0]['grouping']=''; 

$articles[1]['name']='Article 2'; 
$articles[1]['grouping']='Item group'; 

$articles[2]['name']='Article 3'; 
$articles[2]['grouping']=''; 

$articles[3]['name']='Article 4'; 
$articles[3]['grouping']='Item group'; 

$articles[4]['name']='Article 5'; 
$articles[4]['grouping']=''; 

function cmpBySort($a, $b) { 
    return strcmp($a["grouping"], $b["grouping"]); 
} 
usort($articles, 'cmpBySort'); 

foreach ($articles as $article){ 
    echo $article['name'].' - '.$article['grouping'].'<br>'; 
} 

哪種類型喜歡這樣:

Article 5 - 
Article 1 - 
Article 3 - 
Article 2 - Item group 
Article 4 - Item group 

但我想實現 第2條 - 項目組 第4條 - 項目組 第1條 - 第3條 - 第5條 -

注意到我最後想要空白,等同時,然後按商品名稱排序(所以1,3,5而不是5,1,3)

希望有人是一個數組wizz,可以幫助解決這個問題! 謝謝! 斯科特

回答

4

嘗試:

function cmpBySort($a, $b) { 
     if (strcmp($a["grouping"], $b["grouping"]) == 0) { 
      return strcmp($a["name"], $b["name"]); 
     } 
     return -strcmp($a["grouping"], $b["grouping"]); 
    } 
+0

大,這完美的作品!非常感謝! – scott

+0

不客氣:) –