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?


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;

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)


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.


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

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';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.