繁体   English   中英

PHP for 循环仅每第二行有效

[英]PHP for loop only works every second row

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

当队列中有 10 个用户时,执行 function create_new_lobby()。 在此 function 中,比赛已创建,所有用户都应分配到中间表中的团队。 使用 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_dump($payer)来检查它;

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

如果您想要不同的循环步骤,您可以为 for 循环中的第三条语句添加不同的表达式。

例如

for($player = 0; $player <= 9; $player++) {
    var_dump($player);
}
exit;

代码片段将 output 0 1 2 3 4 5 6 7 8 9

for($player = 0; $player <= 9; $player += 2) {
    var_dump($player);
}
exit;

代码片段将 output 0 2 4 6 8

我希望这可以帮助您更好地理解 for 循环。

您面临的实际问题是由您使用 SQL 而不是 for 循环创建的逻辑创建的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM