PHP:For循环只迭代一次

PHP:For循环只迭代一次,php,mysql,function,for-loop,iteration,Php,Mysql,Function,For Loop,Iteration,我有一个用于php游戏的函数,其中有一个用于检查房间ID的循环。基本上,for循环只运行一次,而它应该运行两次。下面的代码块演示了($i的第一个for循环): //成功的sql登录&$player已正确设置为“”,并且所有设置均低于sql //语句执行正确$计数是2 功能设置怪物位置($player,$rooms\u id){ 如果(mysql_结果(mysql_查询(“选择当前状态,其中player=$player和items_id为NULL,monsters_id为NULL,quantity

我有一个用于php游戏的函数,其中有一个用于检查房间ID的循环。基本上,for循环只运行一次,而它应该运行两次。下面的代码块演示了($i的第一个for循环):

//成功的sql登录&$player已正确设置为“”,并且所有设置均低于sql
//语句执行正确$计数是2
功能设置怪物位置($player,$rooms\u id){
如果(mysql_结果(mysql_查询(“选择当前状态,其中player=$player和items_id为NULL,monsters_id为NULL,quantity为NULL,rooms_id不为NULL”),0)==0){
$sql=mysql\u query(“从当前位置选择COUNT(*),其中player=$player和items\u id为空,monsters\u id>100,monsters\u id<300”);
$count=mysql\u结果($sql,0);
$sql=mysql\u query(“从当前位置选择怪物\u id,其中player=$player和items\u id为空,怪物\u id>100,怪物\u id<300,按怪物\u id排序”);
对于($i=0;$i<$count;$i+=1){
$sql=mysql\u query(“从当前位置选择怪物\u id,其中player=$player和items\u id为空,怪物\u id>100,怪物\u id<300,按怪物\u id排序”);
$result=mysql\u result($sql,$i);
如果(mysql_结果(mysql_查询(“从当前位置选择计数(*),其中player=$player和items_id为空,monsters_id=$result和quantity=1”),0)==1){
$final=-1;
$array[1]=$rooms\u id-1;
$array[2]=$rooms\u id+1;
$array[3]=$rooms\u id-100;
$array[4]=$rooms\u id+100;
$array[5]=$rooms\u id-200;
$array[6]=$rooms\u id-101;
$array[7]=$rooms\u id-99;
$array[8]=$rooms\u id-2;
$array[9]=$rooms\u id+200;
$array[10]=$rooms\u id+101;
$array[11]=$rooms\u id+99;
$array[12]=$rooms\u id+2;
如果($result<200){
对于($j=1;$j<5;$j+=1){
$sql=mysql\u query(“从当前位置选择COUNT(*),其中player=$player,items\u id为NULL,monsters\u id不为NULL,rooms\u id={$array[$j]}”);
$count=mysql\u结果($sql,0);
$sql=mysql\u查询(“从房间中选择计数(*)(房间id={$array[$j]})”;
$roompresent=mysql\u结果($sql,0);
如果($count==0,$final==1,$roompresent==1){
$final=$array[$j];
}
}
}否则,如果($result>200){
对于($k=1;$k<13;$k+=1){
$sql=mysql\u query(“从当前位置选择COUNT(*),其中(player=$player和items\u id为NULL,monsters\u id不为NULL,rooms\u id={$array[$k]})”;
$count=mysql\u结果($sql,0);
$sql=mysql_查询(“从房间中选择计数(*)(房间id={$array[$k]})”;
$roompresent=mysql\u结果($sql,0);
如果($count==0和$final==1和$roompresent==1){$final=$array[$k];}
}
如果($final==-1){
$sql=mysql_查询(“从房间中选择计数(*));
$count=mysql\u结果($sql,0);
$sql=mysql_查询(“从房间中选择房间id”);
对于($l=0;$l<$count;$l+=1){
$rooms=mysql\u查询($sql,$l);
$sql=mysql\u query(“从当前位置选择COUNT(*),其中player=$player,items\u id为NULL,monsters\u id不为NULL,rooms\u id=$rooms”);
如果(mysql_result($sql,0)==0和$final=-1){$final=$rooms;}
}
}
}
if($final!=-1){$sql=mysql\u query(“更新当前设置房间\u id=$final,其中player=$player和items\u id为空,monsters\u id=$result;”);}
else{$sql=mysql\u query(“更新当前设置房间\u id=-1,其中player=$player和items\u id为空,monsters\u id=$result”);}
}
}
$sql=mysql\u query(“更新当前设置状态=1,其中player=$player和items\u id为NULL,monsters\u id为NULL,quantity为NULL,rooms\u id不为NULL”);
}否则{
$sql=mysql\u query(“更新当前设置状态=0,其中player=$player和items\u id为NULL,monsters\u id为NULL,quantity为NULL,rooms\u id不为NULL”);
}
}

当$count为2时,for循环只运行一次。我通过在每次for循环运行时向mysql表中的值添加1来验证这一点。该值仅增加一次


顶部的if语句是每隔一个勾号运行一次函数。

for循环的条件部分在循环的每次迭代中都进行计算,因此您不能在主循环中更改
$count
的值。您需要将变量名更改为更有意义的名称

试试这个:

// successful sql login & $player is correctly set with '', and all below sql
// statements execute correctly. $count is 2
function setMonstersLocation($player,$rooms_id){
if (mysql_result(mysql_query("SELECT state FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL"),0) == 0){
    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300");
    // Note here I've changed $count to $playerCount, because it is a count of the
    // number of players.
    $playerCount = mysql_result($sql,0);
    $sql = mysql_query("SELECT monsters_id FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300 ORDER BY monsters_id");
    for ($i = 0; $i < $playerCount; $i+= 1) {
        $sql = mysql_query("SELECT monsters_id FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300 ORDER BY monsters_id");
        $result = mysql_result($sql,$i);
        if (mysql_result(mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id=$result AND quantity = 1"),0) == 1){
            $final = -1;
            $array[1] = $rooms_id - 1;
            $array[2] = $rooms_id + 1;
            $array[3] = $rooms_id - 100;
            $array[4] = $rooms_id + 100;
            $array[5] = $rooms_id - 200;
            $array[6] = $rooms_id - 101;
            $array[7] = $rooms_id - 99;
            $array[8] = $rooms_id - 2;
            $array[9] = $rooms_id + 200;
            $array[10] = $rooms_id + 101;
            $array[11] = $rooms_id + 99;
            $array[12] = $rooms_id + 2;
            if ($result < 200){
                for ($j = 1; $j < 5; $j+=1){
                    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id={$array[$j]}");
                    // Note here I've change $count to $presentCount, because you're
                    // counting the number of presents? (Whatever presents are)
                    $presentCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms WHERE (rooms_id={$array[$j]})");
                    $roompresent = mysql_result($sql,0);
                    if ($presentCount == 0 and $final == -1 and $roompresent == 1){
                        $final = $array[$j];
                    }
                }
            } else if ($result > 200){
                for ($k = 1; $k < 13; $k+=1){
                    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE (player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id={$array[$k]})");
                    // You can use $presentCount again here, because it's a 
                    // different code block to the previous one.
                    // This doesn't mean its in a different SCOPE, however.
                    $presentCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms WHERE (rooms_id={$array[$k]})");
                    $roompresent = mysql_result($sql,0);
                    if ($presentCount == 0 and $final == -1 and $roompresent == 1){ $final = $array[$k]; }
                }
                if ($final == -1){
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms");
                    // Note here I've change $count to $roomsCount, because you're 
                    // counting the number of rooms.
                    $roomsCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT rooms_id FROM rooms");
                    for ($l = 0; $l < $roomsCount; $l+=1){
                        $rooms = mysql_query($sql,$l);
                        $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id=$rooms");
                        if (mysql_result($sql,0) == 0 and $final == -1){ $final = $rooms; }
                    }
                }
            }
            if ($final != -1){ $sql = mysql_query("UPDATE present SET rooms_id=$final WHERE player = $player AND items_id IS NULL AND monsters_id=$result;"); } 
            else { $sql = mysql_query("UPDATE present SET rooms_id=-1 WHERE player = $player AND items_id IS NULL AND monsters_id=$result");}
        }
    }
    $sql = mysql_query("UPDATE present SET state = 1 WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL");
} else {
    $sql = mysql_query("UPDATE present SET state = 0 WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL");
}
//成功的sql登录&$player已正确设置为“”,并且所有设置均低于sql
//语句执行正确$计数是2
功能设置怪物位置($player,$rooms\u id){
如果(mysql_结果(mysql_查询(“选择当前状态,其中player=$player和items_id为NULL,monsters_id为NULL,quantity为NULL,rooms_id不为NULL”),0)==0){
$sql=mysql\u query(“从当前位置选择COUNT(*),其中player=$player和items\u id为空,monsters\u id>100,monsters\u id<300”);
//注意这里我把$count改为$playerCount,因为它是一个
//玩家数量。
$playerCount=mysql\u结果($sql,0);
$sql=mysql\u query(“从当前位置选择怪物\u id,其中player=$player和items\u id为空,怪物\u id>100,怪物\u id<300,按怪物\u id排序”);
对于($i=0;$i<$playerCount;$i+=1){
$sql=mysql\u query(“从当前位置选择怪物\u id,其中player=$player和items\u id为空,怪物\u id>100,怪物\u id<300,按怪物\u id排序”);
$result=mysql\u结果($sq)
// successful sql login & $player is correctly set with '', and all below sql
// statements execute correctly. $count is 2
function setMonstersLocation($player,$rooms_id){
if (mysql_result(mysql_query("SELECT state FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL"),0) == 0){
    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300");
    // Note here I've changed $count to $playerCount, because it is a count of the
    // number of players.
    $playerCount = mysql_result($sql,0);
    $sql = mysql_query("SELECT monsters_id FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300 ORDER BY monsters_id");
    for ($i = 0; $i < $playerCount; $i+= 1) {
        $sql = mysql_query("SELECT monsters_id FROM present WHERE player = $player AND items_id IS NULL AND monsters_id > 100 AND monsters_id < 300 ORDER BY monsters_id");
        $result = mysql_result($sql,$i);
        if (mysql_result(mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id=$result AND quantity = 1"),0) == 1){
            $final = -1;
            $array[1] = $rooms_id - 1;
            $array[2] = $rooms_id + 1;
            $array[3] = $rooms_id - 100;
            $array[4] = $rooms_id + 100;
            $array[5] = $rooms_id - 200;
            $array[6] = $rooms_id - 101;
            $array[7] = $rooms_id - 99;
            $array[8] = $rooms_id - 2;
            $array[9] = $rooms_id + 200;
            $array[10] = $rooms_id + 101;
            $array[11] = $rooms_id + 99;
            $array[12] = $rooms_id + 2;
            if ($result < 200){
                for ($j = 1; $j < 5; $j+=1){
                    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id={$array[$j]}");
                    // Note here I've change $count to $presentCount, because you're
                    // counting the number of presents? (Whatever presents are)
                    $presentCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms WHERE (rooms_id={$array[$j]})");
                    $roompresent = mysql_result($sql,0);
                    if ($presentCount == 0 and $final == -1 and $roompresent == 1){
                        $final = $array[$j];
                    }
                }
            } else if ($result > 200){
                for ($k = 1; $k < 13; $k+=1){
                    $sql = mysql_query("SELECT COUNT(*) FROM present WHERE (player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id={$array[$k]})");
                    // You can use $presentCount again here, because it's a 
                    // different code block to the previous one.
                    // This doesn't mean its in a different SCOPE, however.
                    $presentCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms WHERE (rooms_id={$array[$k]})");
                    $roompresent = mysql_result($sql,0);
                    if ($presentCount == 0 and $final == -1 and $roompresent == 1){ $final = $array[$k]; }
                }
                if ($final == -1){
                    $sql = mysql_query("SELECT COUNT(*) FROM rooms");
                    // Note here I've change $count to $roomsCount, because you're 
                    // counting the number of rooms.
                    $roomsCount = mysql_result($sql,0);
                    $sql = mysql_query("SELECT rooms_id FROM rooms");
                    for ($l = 0; $l < $roomsCount; $l+=1){
                        $rooms = mysql_query($sql,$l);
                        $sql = mysql_query("SELECT COUNT(*) FROM present WHERE player = $player AND items_id IS NULL AND monsters_id IS NOT NULL AND rooms_id=$rooms");
                        if (mysql_result($sql,0) == 0 and $final == -1){ $final = $rooms; }
                    }
                }
            }
            if ($final != -1){ $sql = mysql_query("UPDATE present SET rooms_id=$final WHERE player = $player AND items_id IS NULL AND monsters_id=$result;"); } 
            else { $sql = mysql_query("UPDATE present SET rooms_id=-1 WHERE player = $player AND items_id IS NULL AND monsters_id=$result");}
        }
    }
    $sql = mysql_query("UPDATE present SET state = 1 WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL");
} else {
    $sql = mysql_query("UPDATE present SET state = 0 WHERE player = $player AND items_id IS NULL AND monsters_id IS NULL AND quantity IS NULL AND rooms_id IS NOT NULL");
}