PHPで外部ループを解除するにはどうすればよいですか?


124

PHPの外部for / foreachループを壊そうとしています。

これは、次のようにActionScriptで実行できます。

top : for each(var i:MovieClip in movieClipArray)
{
    for each(var j:String in nameArray)
    {
        if(i.name == j) break top;
    }
}

PHPに相当するものは何ですか?


7
常に最初にドキュメントをご覧ください
Felix Kling

私は、アクションスクリプトのように、2つのソリューション、ラベルの付いたものを掲載し、他のちょうど使用していることをしましたbreak
エドガー・ビジェガスアルバラード

回答:




16

break-nステートメントだけを使用できます。

foreach(...)
{
    foreach(...)
    {
        if (i.name == j) 
            break 2; //Breaks 2 levels, so breaks outermost foreach
    }
}

php> = 5.3を使用している場合はgoto、ActionScriptと同様にラベルとsを使用できます。

foreach (...)
{        
    foreach (...)
    {
        if (i.name == j) 
            goto top;
    }
}
top:

ただし、goto慎重に使用する必要があります。後藤は(悪い習慣と見なされます)


1
gotoにはかなり有効な用途があります。eval()でさえも悪ではありません(実際には悪です)。gotoよりも用途が少ないです。
lucian303 2013年

1
はい。そのため、「gotoは慎重に使用する必要がある」と述べました
Edgar Villegas Alvarado 2013

そのノートでは、このページが関連していると私は信じています:php.net/manual/en/control-structures.goto.php
Ruggi

12

を使用break 2;して、2つのループを同時に抜けることができます。これは、「名前付き」ループを使用した例とまったく同じではありませんが、うまくいくでしょう。


6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}

提供されたコード全体をPHPに変換してみてください。ただし、breakステートメントでは、必要なことは実行されません(内側のループが終了するだけです)。
マーティ

あなたのページを更新:)私はに置き換えブレーク2 PHPマニュアルによると...:「ブレークは、ネストされた外側の構造はのうち破壊されているどのように多くのことを伝え、オプションの数値引数を受け入れます。」
ヨルダンアルセノ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.