Bagaimana saya bisa memutuskan loop luar dengan PHP?

124

Saya mencari untuk memecahkan loop luar untuk / foreach di PHP.

Ini dapat dilakukan di ActionScript seperti ini:

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

Apa yang setara dengan PHP?

Marty
sumber
7
Selalu lihat dokumentasinya terlebih dahulu: php.net/manual/en/control-structures.break.php
Felix Kling
Saya telah memposting 2 solusi, satu dengan label, seperti dalam skrip tindakan dan lainnya yang hanya menggunakanbreak
Edgar Villegas Alvarado

Jawaban:

34

Kata Manual PHP

break menerima argumen numerik opsional yang memberitahukan berapa banyak struktur penutup bersarang yang harus dipecah.

break 2;
Shakti Singh
sumber
16

Anda hanya dapat menggunakan pernyataan break-n:

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

Jika Anda berada di php> = 5.3, Anda dapat menggunakan label dan gotos, mirip seperti di ActionScript:

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

Tapi gotoharus digunakan dengan hati-hati. Goto itu jahat (dianggap praktik buruk)

Edgar Villegas Alvarado
sumber
1
Ada kegunaan yang cukup valid untuk goto. Bahkan eval () tidak jahat (dan memang benar). Ini memiliki kegunaan yang lebih sedikit daripada goto.
lucian303
1
Iya. Itulah mengapa saya berkata "Goto harus digunakan dengan hati-hati"
Edgar Villegas Alvarado
Dalam catatan itu saya yakin halaman ini relevan: php.net/manual/en/control-structures.goto.php
Ruggi
12

Anda dapat menggunakan break 2;untuk keluar dari dua loop pada saat yang bersamaan. Ini tidak persis sama dengan contoh Anda dengan loop "bernama", tetapi itu akan berhasil.

Jon
sumber
6
$i = new MovieClip();
foreach ($movieClipArray as $i)
{
    $nameArray = array();
    foreach ($nameArray as $n) 
        if ($i->name == $n) 
            break 2;
}
Jordan Arseno
sumber
Usaha yang bagus untuk mengubah seluruh kode yang disediakan ke PHP, meskipun pernyataan break tidak melakukan apa yang saya perlukan (itu hanya mengakhiri loop dalam).
Marty
refresh halaman Anda :) Saya mengganti dengan break 2 ... yang menurut Manual PHP: "break menerima argumen numerik opsional yang memberitahukan berapa banyak struktur penutup bersarang yang harus dipecah."
Jordan Arseno
4

Gunakan goto?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
Petr Abdulin
sumber