質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

630閲覧

PHPでソートした特定キーのみランダムにしたい

momiji0210

総合スコア60

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/07/08 05:28

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mdj

2020/07/08 07:25 編集

文章を読んだだけでの提案です。 マッチング処理する度にランダムソート用の数値をそれぞれのPlayerに追加するとかではどうでしょうか。その値をソートキーに追加して、勝率-ランダムソート用数値、とすればできないでしょうか。基になるデータがどんな状態かわからないのでなんとなくですが。
momiji0210

2020/07/08 07:55

なるほど!!確かにそちらの方法で解決できそうです。 ありがとうございます!!メチャクチャ参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問