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