转换为php版本< 5.3.0?

时间:2012-02-07 18:23:40

标签: php goto

我需要在我的代码中使用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:

4 个答案:

答案 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可以使代码非常整洁和可读。