0

私は検索しようとしましたが、これを見つけました:

PHPで子配列の値で配列をソートする

しかし、私の場合、関数は機能しません:

                $sorted = array();
                foreach($players as $player)
                {
                    $p = Model::factory('user');
                    $p->load($player['id']);

                    $sorted[] = array('id' => $player['id'], 'username' => $p->get_username());
                }

ユーザー名の後に配列をアルファベット順に並べ替えるにはどうすればよいですか?

関数、

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

次に、usort($sorted,"cmp"); を呼び出します。私にはうまくいきません(未定義のインデックス[2]というエラーが発生します)。

また、降順または昇順でソートする必要があるかどうかを選択する方法はありますか?

4

2 に答える 2

0

「cmp」関数は次のようになります。

// $param - the parameter by which you want to search
function cmp(&$a, &$b, $param) {
    switch( $param ) {
        case 'id':
            if ( $a['id'] == $b['id'] ) {
                return 0;
            }

            return ( $a['id'] < $b['id'] ) ? -1 : 1;
            break;
        case 'username':
            // string comparison
            return strcmp($a['username'], $b['username']);
            break;
    }
}

// this is the sorting function by using an anonymous function
// it is needed to pass the sorting criterion (sort by id / username )
usort( $sorted, function( $a,$b ) {
    return cmp( $a, $b, 'username');
});
于 2012-04-05T10:12:20.907 に答える
0

インデックス 2 が配列に存在しないためです。$a['username'] または $a['id'] を使用する必要がありますが、ユーザー名で並べ替えたいので、$a['username'] を使用します。

于 2012-04-05T10:08:56.493 に答える