【问题标题】:Randomising two teams Php Mysql随机化两个团队 PHP Mysql
【发布时间】:2018-05-04 18:28:09
【问题描述】:

我正在构建一个游戏,其中用户加入游戏大厅,然后分成两个团队,然后回答问题。 但我有一个问题,除了团队随机化器之外的一切都完成了。 我希望在按下按钮时将用户分配到一个团队,这不是问题,我可以这样做。

问题在于组建团队。 现在我通过这行代码获取并显示当前用户

if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        while($row = mysqli_fetch_array($result)){
            echo utf8_encode("<div><br>". $row["name"]. " <b>| Lag : </b><span>" . $row["team"] . "</span><br></div>"); // för namn osv 
            mysqli_close($link);
        }
    }
}
echo "";

我希望所有用户均等地随机分配到两个大团队,因此我不能使用简单的随机分配器让用户有 50/50 的机会加入一个或另一个团队,因为这有可能使团队非常不平等。

当用户被分配到一个团队时,脚本将运行一个查询,为每个用户更新一个名为“团队”的列,然后游戏将开始。

我怎样才能做到这一点,以便在按下按钮时,代码会获取用户并将所有用户放入两个不同的团队中? 这是用数组完成的,还是什么?我一无所知!

团队尽可能平等是很重要的。

我该怎么办? 我见过用 javascript 做的事情,但这在这里不起作用。


澄清。

没有最大球员,有两支队。我将运行一个查询,将用户分配给数据库中的一个团队。

如果我遗漏了什么,或者需要更多信息,请告诉我!

【问题讨论】:

  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db-&gt;prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。
  • 提示:要将人员分成两个团队,请为每个用户分配一个随机的“订单”编号,然后按照结果顺序将他们拆分为奇数/偶数或前半部分/后半部分。
  • 您可以将所有用户存储在一个数组中,对数组进行洗牌,然后执行一个占用户总数一半的 array_chunk。然后你会有两个随机用户的数组。
  • 我已经研究过了,但是之后我该如何处理数组呢?我留下了一个数组,但我不知道如何使用它。如何更新列??
  • @Jonas 如果我的编辑中有任何关于澄清您的帖子的错误,请修复它。

标签: php mysql random


【解决方案1】:

一旦你得到了结果集中的球员名单,使用 shuffle() 函数将他们洗牌,然后将前一半的球员分配给第 1 队,将另一半分配给第 2 队

以下假设将有两支球队的球员人数为偶数:

<?php

$players = array("Player 1","Player 2","Player 3","Player 4","Player 5","Player 6","Player 7","Player 8");

//Players list before shuffling
var_dump($players);
shuffle($players);

//Players list after shuffling
var_dump($players);

// Get number of players per team
$player_count = count($players);
$players_per_team = $player_count/2;

$teams = array_chunk($players,$players_per_team);

$team_1 = $teams[0];
$team_2 = $teams[1];

echo 'Team 1';
var_dump($team_1);

echo 'Team 2';
var_dump($team_2);

【讨论】:

  • 听起来可行!能否请您提供一些关于这可能是什么样子的示例,谢谢!
猜你喜欢
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 2015-07-07
  • 1970-01-01
  • 2020-10-15
  • 2015-03-22
  • 1970-01-01
相关资源
最近更新 更多