我需要在我的代码中使用goto运算符,因为我似乎无法想到解决它的方法。但问题是我的主机只安装了PHP版本5.2.17。
有什么想法吗?
以下是我的代码:
if ($ready !=="y")
{
$check=mysql_query("SELECT `inserted` FROM `team`");
$numrows = mysql_num_rows($check);
$i="0";
while ($i<$numrows && $row = mysql_fetch_assoc($check))
{
$array[$i] = $row['inserted'];
$i++;
}
if (in_array("n", $array))
{
goto skip;
}
else
{
mysql_query("
UPDATE game SET ready='y'
");
}
}
skip:
答案 0 :(得分:8)
您的代码中有一些反模式。我们来清理吧。我会解释一下这里有什么变化。
if($ready !== "y") {
$sth = mysql_query("SELECT inserted FROM team WHERE inserted = 'n'");
if(mysql_num_rows($sth) > 0) {
mysql_query("UPDATE game SET ready = 'y'");
}
}
首先要做的事情是:无需执行查询,获取结果的所有,然后循环查看特定值的结果(in_array
)。让数据库通过明确查找inserted
是字符串文字"n"
的行来为您执行此操作。
因为我们知道我们只收回"n"
条记录,所以我们只需检查是否有任何结果。如果是,请运行查询。如果没有"n"
条记录,则UPDATE
不会运行。
如果您需要知道UPDATE
已运行,请为其添加一项检查:
$ran_update = false;
if($ready !== "y") {
$sth = mysql_query("SELECT inserted FROM team WHERE inserted = 'n'");
if(mysql_num_rows($sth) > 0) {
mysql_query("UPDATE game SET ready = 'y'");
$ran_update = true;
}
}
if($ran_update) {
// ...
}
答案 1 :(得分:1)
你想使用正确的控制字来打破循环:
if ($ready !=="y")
{
$check=mysql_query("SELECT `inserted` FROM `team`");
$numrows = mysql_num_rows($check);
$i="0";
while ($i<$numrows && $row = mysql_fetch_assoc($check))
{
$array[$i] = $row['inserted'];
$i++;
}
if (in_array("n", $array))
{
break;
}
else
{
mysql_query("
UPDATE game SET ready='y'
");
}
}
break关键字将完全按照您的意愿执行:结束while循环的执行。永远不要使用goto!
答案 2 :(得分:0)
首先,您可以使用break
退出初始循环。其次,如果你需要测试任何东西,在调用break
之前设置一个变量(必须是全局而不是本地的)作为标志或指示符,然后执行条件测试语句,在其skip
行执行您需要的任何其他步骤。
答案 3 :(得分:0)
作为对这篇文章标题的直接回应:
do{
if (!$condition){
break;
}
// Code called if conditions above are met
}while(0);
//Code always called
在某些情况下,这个或goto可以使代码非常整洁和可读。