36

次のような配列があります。

Array
(
    [team1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    [team2] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    ... many more teams
)

チームを各チームのポイント数で並べ替えたいと思います。私はこれを試しました:

function sort_by_points($a,$b)
{
    if ($a['points']==$b['points']) return 0;
        return ($a['points']<$b['points'])?1:-1;
}

usort($this->wordswithdata, "sortbycount");

しかし、そのアプローチはチーム名と戻り値を含むキーをオーバーライドします:

Array
(
    [0] => Array
        (
            [points] => 23
            [players] => Array
                (
                     ...
                )
        )

    [1] => Array
        (
            [points] => 10
            [players] => Array
                (
                     ...
                )
        )

    etc...
)

チーム名を配列キーとして上書きせずに配列をソートする方法はありますか?

4

5 に答える 5

25

使用できますuasort

uasort($array, function($a, $b) {
    return $a['points'] - $b['points'];
});

この関数は、ユーザー定義の比較関数を使用して、配列インデックスが関連付けられている配列要素との相関関係を維持するように配列を並べ替えます。

于 2013-04-02T10:57:08.293 に答える
2

U は、連想配列をその値で次のように並べ替えることができます

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

function Ascending($a, $b) {   
    if ($a == $b) {        
        return 0;
    }   
        return ($a < $b) ? -1 : 1; 
}  

function Descending($a, $b) {   
    if ($a == $b) {        
        return 0;
    }   
        return ($a > $b) ? -1 : 1; 
}  


echo "Ascending order" ;
uasort($age,"Ascending");
print_r($age);


echo "</br>Descending order" ;
uasort($age,"Descending");
print_r($age);
于 2018-07-22T12:54:23.603 に答える