web-dev-qa-db-ja.com

PHPで多次元配列をソートするときに配列インデックスキーを保持する

array(10) { 
[1019]=> array(3) { ["quantity"]=> int(0) ["revenue"]=> int(0) ["seller"]=> string(5) "Lenny" } 
[1018]=> array(3) { ["quantity"]=> int(5) ["revenue"]=> int(121) ["seller"]=> string(5) "Lenny" } 
[1017]=> array(3) { ["quantity"]=> int(2) ["revenue"]=> int(400) ["seller"]=> string(6) "Anette" } 
[1016]=> array(3) { ["quantity"]=> int(25) ["revenue"]=> int(200) ["seller"]=> string(6) "Samuel" } 
[1015]=> array(3) { ["quantity"]=> int(1) ["revenue"]=> int(300) ["seller"]=> string(6) "Samuel" } 
[1014]=> array(3) { ["quantity"]=> string(2) "41" ["revenue"]=> string(5) "18409" ["seller"]=> string(6) "Samuel" }
}

上記のアレイで作業しています。この多次元配列は$statsと呼ばれます。

この配列を数量でソートしたいと思います。

そのため、多次元配列には最初の配列1016、次に1018、1017などがあります。

私はこれをしました:

                function compare($x, $y) {
                    if ( $x['quantity'] == $y['quantity'] )
                    return 0;
                    else if ( $x['quantity'] > $y['quantity'] )
                    return -1;
                    else
                    return 1;
                }
                usort($stats, 'compare');

うまくいきます!

しかし、問題は、ソートされるときにヘッド配列インデックス(ID、1019、1018、1017など)が表示されなくなることです。配列のインデックスを保持したいのですが。

これどうやってするの?

31
Karem

必要なのはuasortだと思います—

FROM PHP DOC

ユーザー定義の比較関数で配列を並べ替え、インデックスの関連付けを維持する

  uasort($stats, 'compare');
91
Baba