-1

我有一个嵌套循环,即

while()
{
    for()
    {

    }
}

在我的页面中,我试图打破 for 循环并进入 while 循环而不退出它。我试过了break;,这些都没用。这是代码:break 1;goto xxx;

while( $results = pg_fetch_assoc( $result ) )
{

    $url = $results['url'];
    for( $i = 0; $i < ($recordnum - 1); $i++ )
    {

        $urlpopup = $foldername . "/" . $namecomingform[$i];

        if( $url == $urlpopup )
        {

            $isthererecord = 'yes';

            goto getoutoffor;
        }
        else
        {

            $isthererecord = 'no';
        }
    }//end of for
    getoutoffor:

    if( $isthererecord == 'no' )
    {

        $sql = "UPDATE pictures SET erased='1' WHERE url='" . $url . "'";

        $run = pg_query( $sqlconnection, $sql );
    }
} //end of while

似乎它只检查数据库中的一条记录。

任何帮助表示赞赏。

4

5 回答 5

2

您可能关心这部分:

$url = $results['url'];
for( $i = 0; $i < ($recordnum - 1); $i++ )
{

    $urlpopup = $foldername . "/" . $namecomingform[$i];

    if( $url == $urlpopup )
    {

        $isthererecord = 'yes';

        goto getoutoffor;
    }
    else
    {

        $isthererecord = 'no';
    }
}//end of for
getoutoffor:

阅读。您在这里循环只是为了测试末尾的数字$url是否介于0和之间$recordnum - 1。而是从字符串中提取前缀和数字。比较前缀,如果匹配,检查数字是否在该范围内。

这样做还可以进一步了解您在代码中遇到的逻辑问题。从您问题的措辞看来,您在这里找错了地方,所以我希望我的回答对您有所帮助。

于 2012-10-22T13:51:03.737 回答
1

我知道我来晚了,但我遇到了类似的问题。适用于您的情况,我要做的是将代码更改为以下内容:

$LoopBreak = 'no';
while( $results = pg_fetch_assoc( $result ) )
{
if ($LoopBreak == 'yes') {
break;//Insert break statement here
}

else {    //This is First else

$url = $results['url'];
for( $i = 0; $i < ($recordnum - 1); $i++ )
{
    $urlpopup = $foldername . "/" . $namecomingform[$i];

    if( $url == $urlpopup )
    {
        $isthererecord = 'yes';
        $LoopBreak = 'yes'; //Variable added in place of break here
    }
    else
    {
        $isthererecord = 'no';
    }
}//end of for

if( $isthererecord == 'no' )
{
    $sql = "UPDATE pictures SET erased='1' WHERE url='" . $url . "'";
    $run = pg_query( $sqlconnection, $sql );
}

}//End First else
} //end of while
于 2013-11-25T04:01:50.823 回答
0

不是处理这个问题的最好方法,但你可以在你的 FOR 循环中添加一个额外的条件,(&& $isthererecord != 'yes')并在进入循环之前初始化$isthererecord变量,所以你修改的代码最终会像以下:

$isthererecord = '';
while ( $results = pg_fetch_assoc( $result ) ) {
    $url = $sorgusonucu['url'];
    for ( $i = 0; $i < ( $recordnum - 1 ) && $isthererecord != 'yes'; $i++ ) {
        $urlpopup = $foldername . "/" . $namecomingform[ $i ];

        if ( $url == $urlpopup ) {
            $isthererecord = 'yes';
            continue;
        }
        else {
            $isthererecord = 'no';
        }
    }

    if ( $isthererecord == 'no' ) {
        $sql = "UPDATE pictures SET erased = '1' WHERE url = '" . $url . "'";
        $run = pg_query( $sqlconnection, $sql );
    }
}
于 2012-10-22T13:52:01.717 回答
0

在 for 循环中永远不需要 else

while ( $results = pg_fetch_assoc( $result ) ) {
    $url = $sorgusonucu['url'];
    for ( $i = 0; $i < ( $recordnum - 1 ) && $isthererecord != 'yes'; $i++ ) {
        $urlpopup = $foldername . "/" . $namecomingform[ $i ];

        if ( $url === $urlpopup ) {
            $sql = "UPDATE pictures SET erased = '1' WHERE url = '" . $url . "';";
            $run = pg_query( $sqlconnection, $sql );
            break;
        }
    }
}
于 2013-06-20T07:28:04.780 回答
0

正如其他人所说,break;是你应该使用的。如果您的代码不能与 break; 一起使用,那么很可能是其他问题,例如 if 语句检查或 for 循环中的条件从未被满足(这意味着 for 循环甚至永远不会启动) . 你真的应该更多地调试你的代码。但不要使用goto. 利用break;

假设所有变量都是正确的,下面的代码应该真的可以工作:

while( $results = pg_fetch_assoc( $result ) )
{
    $url = $results['url'];
    for( $i = 0; $i < ($recordnum - 1); $i++ )
    {
        $urlpopup = $foldername . "/" . $namecomingform[$i];

        if( $url == $urlpopup )
        {
            $isthererecord = 'yes';
            break;
        }
        else
        {
            $isthererecord = 'no';
        }
    }//end of for

    if( $isthererecord == 'no' )
    {
        $sql = "UPDATE pictures SET erased='1' WHERE url='" . $url . "'";
        $run = pg_query( $sqlconnection, $sql );
    }
} //end of while
于 2012-10-22T13:50:26.333 回答