スポーツチームを生成するためのコードに取り組んでいます。プレーヤーのリストを含む配列があり、考えられるすべてのチームの組み合わせを別の配列に格納したいと思います。
簡単にするために、2つのチームに分割される4人のプレーヤーがいるテニスの試合を想像してみましょう。
$players = array("Federer","Del Potro","Nadal","Murray");
出力配列は次のようになります。
$combinations[0][0] = "Federer","Del Potro";
$combinations[0][1] = "Nadal","Murray";
$combinations[1][0] = "Federer","Nadal";
$combinations[1][1] = "Del Potro","Murray";
$combinations[2][0] = "Del Potro","Nadal";
$combinations[2][1] = "Federer","Murray"; .. and so forth..
何か助けはありますか?
前もって感謝します!
/// - 編集
これは私がこれまでに持っているコードです。すべてのプレイヤーにもスコアがあり、後で使用できるようにこのスコアを保存します。それは本当に重要ではありません。私はそれが機能していると思いますが、このコードがすべての可能な組み合わせを取得するかどうかはわかりません。私がやっていることは、「プレーヤー数」の回数をループしてチームの構築を開始することです。チームが構築された後、リストの2番目のプレーヤーを配列の一番下に移動して再度ループします。
//-- Get the Max Players and the Array of Player Names
$max_players = count($players)/2;
$p = array_keys($players);
for($i=0;$i<=(count($p));$i++){
$tmp = array();
$t=0;
//-- Loop and start placing players into a team. When the max is reached, start placing on the other team.
foreach($p as $player) {
//-- Store player on Team
$tmp[$t][] = $player;
if(count($tmp[$t])==$max_players) {
$t++;
}
}
//-- Get the second player and move it to the bottom of the list.
$second = $p[1];
unset($p[1]);
$p[] = $second;
$p = array_values($p);
//-- Loop thru teams and add the score of each player
foreach($tmp as $key=>$eq) {
$score = 0 ;
foreach($eq as $jug) {
//-- Add Score for each player
$score += floatval($players[$jug]["score"]);
}
//-- Store the sum of scores of all players in team
$tmp[$key]["score"] = $score;
}
//-- Store the Difference between team scores in this "team set"
$tmp["diff"] = abs(round($tmp[0]["score"]-$tmp[1]["score"],2));
$teams[] = $tmp;
}