多维数组挑战

时间:2012-05-08 06:51:30

标签: php arrays multidimensional-array

我试图通过内部值的非标准排序对数组进行排序,但是当其他值相等时,保留它们的顺序。所以我这样做:

$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,可以帮助解决这个问题! 谢谢! 斯科特

1 个答案:

答案 0 :(得分:4)

尝试:

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