PHP ile bir dış döngüyü nasıl kırabilirim?


124

PHP'de bir dış for / foreach döngüsünü kırmak istiyorum.

Bu, ActionScript'te şu şekilde yapılabilir:

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

PHP eşdeğeri nedir?


7
Her zaman önce belgelere bir göz atın: php.net/manual/en/control-structures.break.php
Felix Kling

Eylem senaryosunda olduğu gibi, biri etiketli, diğeri ise sadece kullanan 2 çözüm yayınladımbreak
Edgar Villegas Alvarado

Yanıtlar:



34

PHP Kılavuzu diyor

break, ona kaç tane iç içe geçmiş çevreleyici yapının ayrılacağını söyleyen isteğe bağlı bir sayısal argümanı kabul eder.

break 2;

16

Yalnızca bir break-n ifadesi kullanabilirsiniz:

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

Php> = 5.3 içindeyseniz goto, ActionScript'tekine benzer şekilde etiketleri ve s kullanabilirsiniz :

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

Ancak gotodikkatli kullanılmalıdır. Goto kötüdür (kötü bir uygulama olarak kabul edilir)


1
Goto için oldukça geçerli kullanımlar vardır. Eval () bile kötü değildir (ve öyledir). Goto'dan bile daha az kullanımı vardır.
lucian303

1
Evet. Bu yüzden "git dikkatli kullanılmalı" dedim
Edgar Villegas Alvarado

Bu notta, bu sayfanın alakalı olduğuna inanıyorum: php.net/manual/en/control-structures.goto.php
Ruggi

12

break 2;Aynı anda iki döngüden çıkmak için kullanabilirsiniz . Bu, "adlandırılmış" döngülerdeki örneğinizle tamamen aynı değildir, ancak hile yapacak.


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

Sağlanan kodun tamamını PHP'ye dönüştürmeyi deneyin, ancak break ifadesi yapmam gerekeni yapmıyor (yalnızca iç döngüyü sona erdiriyor).
Marty

yenileme sayfasını :) Ben break 2 ile değiştirdim ... PHP Kılavuzuna göre: "break, kaç tane iç içe geçmiş çevreleyici yapının ayrılacağını söyleyen isteğe bağlı bir sayısal argümanı kabul eder."
Jordan Arseno

4

Goto kullanılsın mı?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.