-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

データベースから1つのレコードのみをチェックしているようです。

どんな助けでも大歓迎です。

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

他の人が述べているように、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 に答える
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 に答える