0

テーブル/配列があります。たとえば、Excelでは、列1 asc、列2 desc、列3ascなどで並べ替えることができます。

PHPでも同じことができますか?最初["first_name"] ASCに、、次に["last_name"] DESC、、["player_id"] ASCおよび["user_id"] DESC

array(2) {
    [0]=> array(6) {
        [0]=> string(8) "John",
        ["first_name"]=> string(8) "John",
        [1]=> int(7) "44",
        ["score"]=> int(7) "44",
        [2]=> string(2) "7",
        ["player_id"]=> string(2) "7",
        [3]=> string(2) "3",
        ["user_id"]=> string(2) "3"
    },
    [1]=> array(6) {
        [0]=> string(5) "Sam",
        ["first_name"]=> string(5) "Sam",
        [1]=> int(7) "55",
        ["score"]=> int(7) "55",
        [2]=> string(2) "1",
        ["player_id"]=> string(2) "1",
        [3]=> string(2) "6",
        ["user_id"]=> string(2) "61"
    }
}

(実際には、配列ははるかに長く、深くなっています。これは単なる例です。)

アップデート:

function byPlayerID($player, $compare) {
    if($player['player_id'] > $compare['player_id'])
        return 1; // move up
    else if($player['player_id'] < $compare['player_id'])
        return -1; // move down
    else
        return 0; // do nothing

    if($player['score'] > $compare['score'])
        return 1; // move up
    else if($player['score'] < $compare['score'])
        return -1; // move down
    else
        return 0; // do nothing
}

更新2:気にしないでください、私はただ削除する必要がありましたreturn 0;

4

4 に答える 4

4

array_multisortはあなたが探している関数です。

そして、これがarray_multisortを使用して記述された関数の例です

https://gist.github.com/1220785

を使用して

   $sorted_arraty = sort_array_multidim($array,"first_name ASC, last_name DESC, player_id ASC, user_id DESC");
于 2012-06-01T07:47:00.190 に答える
1

usort()を使用します。

例:

$byPlayerID = function($player, $compare) {
  if($player['player_id'] > $compare['player_id'])
    return 1; // move up
  else if($player['player_id'] < $compare['player_id'])
    return -1; // move down
  else
    return 0; // do nothing
};

usort($players, $byPlayerID);
// now $players is sorted!

これにはPHP5.3が必要ですが、以下は下位互換性の高いバージョンです。

function byPlayerID($player, $compare) {
  if($player['player_id'] > $compare['player_id'])
    return 1; // move up
  else if($player['player_id'] < $compare['player_id'])
    return -1; // move down
  else
    return 0; // do nothing
}

usort($players, "byPlayerID");
于 2012-06-01T07:40:11.647 に答える
0

PHP関数usortを使用して、必要に応じて値を比較します。コールバック関数を拡張して、複数の値を比較します。

于 2012-06-01T07:38:27.933 に答える
0

将来これを見つけた人のために、これが元の質問に完全に答える最終的な作業バージョンです。これは、4つの異なるキー値でソートされます。

$byPlayerID = function($a, $b) {

  // Sort by first
  // > to return 1, < to return -1 = ASC order
  if($a['first_name'] > $b['first_name']) return 1; // move up
  else if($a['first_name'] < $b['first_name']) return -1; // move down

  // Sort by second
  // < to return 1, > to return -1 = DESC order
  if($a['last_name'] < $b['last_name']) return 1; // move up
  else if($a['last_name'] > $b['last_name']) return -1; // move down

  // Sort by third
  // > to return 1, < to return -1 = ASC order
  if($a['player_id'] > $b['player_id']) return 1; // move up
  else if($a['player_id'] < $b['player_id']) return -1; // move down

  // Sort by fourth
  // < to return 1, > to return -1 = DESC order
  if($a['user_id'] < $b['user_id']) return 1; // move up
  else if($a['user_id'] > $b['user_id']) return -1; // move down

  else return 0; // do nothing

};

usort($stats, $byPlayerID);
于 2017-08-24T01:39:46.770 に答える