PHPの勉強をしており、対戦組み合わせを勝率が高い人同士でマッチングするようなテストプログラムを書いております。
近い処理はできたのですが、勝率でソートを行うと指定していないキーまでソートされてしまいます。
下記、ソースコードとなります。下記の例ではidをソートのキーとして指定していないのですが、
同じ勝率の人がいた場合、id順でソートされてしまっているようです。
ソートの前にシャッフル、ソート、上から2人ずつ取得して組み合わせを作るみたいな処理にしたいのですが、
回避方法などありますでしょうか。
PHP
1$memberArray = array(); 2for ($i=0; $i<10; $i++) { 3 array_push($memberArray, array( 4 'id' => $i, 'opponent' => rand()%100, 'winPoint' => rand()%10, 'drop' => rand()%2 5 )); 6} 7 8// シャッフル 9shuffle($memberArray); 10 11// ソート 12$memberArray = sortOpponent($memberArray); 13 14// 上から2人ずつ取得 15~省略~ 16 17/* 18 * 配列をオポネントでソート(英数字) 19 * $arrPlayer: opponent変数が用意されている配列 20 * return: ソートした配列 21 */ 22function SortOpponent($arrPlayer) { 23 // 入れ替える用で保持 24 $array = $arrPlayer; 25 26 // ソートのキーを指定 27 foreach($array as $key => $value){ 28 $sortKeysWinPoint[$key] = $value['winPoint']; 29 $sortKeysOpponent[$key] = $value['opponent']; 30 $sortKeysDrop[$key] = $value['drop']; 31 } 32 33 // 降順並び替え 34 array_multisort( 35 $sortKeysWinPoint, SORT_DESC, 36 $sortKeysOpponent, SORT_DESC, 37 $sortKeysOpponent, SORT_ASC, 38 $array 39 ); 40 41 // オポネントでソートした配列を返す 42 return $array; 43}
あなたの回答
tips
プレビュー