【问题标题】:How pair players in PHP? [closed]如何在 PHP 中配对玩家? [关闭]
【发布时间】:2018-05-29 09:56:11
【问题描述】:

我开始学习,我正在制作一个家庭 fifa18 杯的项目。 我有一个问题,我不知道如何将所有玩家配对我的意思是: 播放器1,播放器2,播放器3,播放器4

=> 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);
}
?>

【问题讨论】:

  • 没有提供足够的信息。你在哪里存放你的球员?到目前为止,您尝试过什么?
  • @Shapir 他们对你的问题投了反对票,因为他们想先看到你的努力,没有人完全为你编码,他们会纠正你,所以先展示你的努力。
  • 在发布之前,您为什么不尝试寻找一些解决方案?我刚刚在 Google 上搜索了“php 获取数组中的所有组合”并找到了很多可以帮助您的东西:)
  • @BILALMALIK 我很抱歉,我不知道这个网站是如何运作的,我想我应该问一下,我搜索但我的英语不好,我不知道我应该如何表达我的问题。我编辑我的帖子并给出我写的内容。

标签: php


【解决方案1】:

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

$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

【讨论】:

  • $i+1 技巧是处理冗余的好方法。
【解决方案2】:

如果 P1 vs P2 和 P2 vs 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】:
$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);

【讨论】:

    【解决方案4】:
    <?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,
        ),
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 2021-04-09
      • 2020-09-26
      相关资源
      最近更新 更多