2012-05-08 20 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 -

最後にブランクが必要であることに気づいたら、記事名で注文してください(5,1,3の代わりに1,3,5)

誰かがこれを理解するのに役立つアレイウィズです ありがとう! スコット

答えて

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

あなたは歓迎です:) –