如何在PHP中配对玩家?

时间:2018-05-29 09:56:12

标签: php

我开始学习,我正在制作家用fifa18杯的项目。 我有一个问题,我不知道如何配对我所说的所有球员: Player1,Player2,Player3,Player4

=> P1 vs P2, P1 vs P3, P1 vs P4 
=> P2 vs P3, P2 vs P4 
=> P3 vs P4

我使用牛顿公式n!/k!(n-k)!计算未报复的匹配次数,并让所有玩家都在$tab

现在,我的问题,我该如何配对?

就像那样,它不会重复和P1 vs P1示例。

<?php
    require("server/baza.php");
    $przelacznik = 1;//$_POST['losuj'];
    $zapytanie = "select nick from mecze";
    if($przelacznik == 1){
        $wynik = mysqli_query($polaczenie,$zapytanie);
        $tab = array();
        $n=0;
        while($wiersz = mysqli_fetch_assoc($wynik)){ 
            array_push($tab,$wiersz['nick']);
            //$tab[] = $wiersz;
            $n++;  
        }
        $Nsilnia = 1;
        $NKsilnia =1;
        for ($i=1; $i<=$n; $i++) {
            $Nsilnia *= $i;
        }
        for($j=1;$j<=($n-2);$j++){
            $NKsilnia *= $j;
        }
        $ilosc_rozgrywek = ($Nsilnia)/(2*$NKsilnia);
}
?>

4 个答案:

答案 0 :(得分:6)

如果您将播放器存储在如下数组中:

$player = ['P1', 'P2', 'P3', 'P4'];

你可以使用两个循环来配对所有可能的匹配,而不用复仇。

for ($i = 0; $i < count ($player); $i++) {

    //set the start of the second loop to $i + 1 
    for ($j = $i + 1; $j < count ($player); $j++) {

      echo $player[$i].' vs '.$player[$j];

    }

}

将输出:

// P1 vs P2
// P1 vs P3
// P1 vs P4
// P2 vs P3
// P2 vs P4
// P3 vs P4

答案 1 :(得分:2)

$players = [ 'p1', 'p2','p3','p4', 'p5'];
$result =[];
for($i = 0; $i < count($players); $i++ ) {
    for($j=$i+1; $j<count($players); $j++) {
        $result[] = $players[$i] . ' vs ' . $players[$j];
    }
}
print_r($result);

答案 2 :(得分:2)

如果P1与P2和P2与P1不相同。然后使用这个。

$player_list = ['p1', 'p2', 'p3', 'p4'];
$player_pair = array();
foreach($player_list as $key => $player){
    for($i = 0; $i < count($player_list); $i++ ){
        if($i != $key){
            $player_pair[] =  $player_list[$i] . ' VS ' . $player;
        }
    }
}
print_r($player_pair);

使用这一个:

$player_list = ['p1', 'p2', 'p3', 'p4'];
$player_pair = array();
foreach($player_list as $key => $player){
    for($i = 0; $i < count($player_list); $i++ ){
        $str = $player_list[$i] . ' VS ' . $player;
        $str2 = $player . ' VS ' . $player_list[$i];
        if($i != $key && !in_array($str, $player_pair) && !in_array($str2, $player_pair)){
            $player_pair[] =  $player_list[$i] . ' VS ' . $player;
        }
    }
}
print_r($player_pair);

答案 3 :(得分:0)

<?php
$no_players = 4;
$pairings   = [];

for($i = 1; $i <= $no_players; $i++)
    for($j = 1; $j <= $no_players; $j++)
        if($i !== $j && !in_array([$j, $i], $pairings))
            $pairings[] = [$i, $j];
var_export($pairings);

输出:

array (
    0 => 
    array (
      0 => 1,
      1 => 2,
    ),
    1 => 
    array (
      0 => 1,
      1 => 3,
    ),
    2 => 
    array (
      0 => 1,
      1 => 4,
    ),
    3 => 
    array (
      0 => 2,
      1 => 3,
    ),
    4 => 
    array (
      0 => 2,
      1 => 4,
    ),
    5 => 
    array (
      0 => 3,
      1 => 4,
    ),
  )