PHP for循环只在第二行起作用

PHP for循环只在第二行起作用,php,for-loop,Php,For Loop,在我当前的项目中,我想将队列中的10个用户分成2个团队,每个团队有5个用户 当队列中有10个用户时,将执行函数create_new_lobb()。在该函数中,将创建匹配项,并将所有用户分配到中间表中的团队。使用for循环时,应将所有用户分配到匹配项。目前for循环只接受每秒一个用户(0、2、4、6、8)。for循环显然跳过了值1、3、5、7和9 这里的错误在哪里 <?php function create_new_lobby() { global $connection;

在我当前的项目中,我想将队列中的10个用户分成2个团队,每个团队有5个用户

当队列中有10个用户时,将执行函数create_new_lobb()。在该函数中,将创建匹配项,并将所有用户分配到中间表中的团队。使用for循环时,应将所有用户分配到匹配项。目前for循环只接受每秒一个用户(0、2、4、6、8)。for循环显然跳过了值1、3、5、7和9

这里的错误在哪里

<?php 
function create_new_lobby() {

    global $connection;

    $timestamp = date("Y-m-d H:i:s", strtotime(date('h:i:sa')));

    $stmt = $connection->prepare("INSERT INTO competition_game (create_time) VALUES (?)");
    $stmt->bind_param("s", $timestamp);
    $stmt->execute();
    $stmt->close();

    $stmt = $connection->prepare("SELECT competition_match_id FROM competition_game ORDER BY competition_match_id DESC LIMIT 0, 1");
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();

    $competition_match_id = $row['competition_match_id'];

    $stmt->close();

    for($player = 0; $player <= 9; $player++) {
        $status_queue = 1;
        $stmt = $connection->prepare("SELECT * FROM competition_queue WHERE competition_queue_status = ? AND DATE_ADD(competition_queue_activity ,INTERVAL 20 MINUTE) >= NOW() ORDER BY competition_queue_id ASC LIMIT ?, 1");
        $stmt->bind_param("ss", $status_queue, $player);
        $stmt->execute();
        $result = $stmt->get_result();

        while($row = $result->fetch_assoc()) {

            $user_id = $row['user_id'];

            $stmt1 = $connection->prepare("INSERT INTO competition_game_player (competition_match_id, user_id) VALUES (?, ?)");
            $stmt1->bind_param("ss", $competition_match_id, $user_id);
            $stmt1->execute();
            $stmt1->close();
        }

        $stmt->close();

        $status_leave = 2;
        $stmt = $connection->prepare("UPDATE competition_queue SET competition_queue_status = ? WHERE user_id = ? AND competition_queue_status = ?");
        $stmt->bind_param("sss", $status_leave, $user_id, $status_queue);
        $stmt->execute();
        $stmt->close();
    }
}
?>

当前结果:

预期结果:

for循环正常工作,您可以通过在for循环中放置
var\u dump($payer)
来检查这一点

for循环中的增量由第三条语句给出,
$player++
,这意味着
$player=$player+1

如果希望有不同的循环步骤,可以在for循环中为第三条语句添加不同的表达式

e、 g


用于($player=0;$player问题是,您使用
限制
从竞争队列中选择*以获取循环中的特定记录,处理该记录,然后在同一循环结束时
更新竞争队列
——这将有效地从队列中删除该记录。因此,您现在在循环中减少了1条记录队列,但仍会增加
$player
for($player = 0; $player <= 9; $player++) {
    var_dump($player);
}
exit;
for($player = 0; $player <= 9; $player += 2) {
    var_dump($player);
}
exit;