[英]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.