Làm thế nào tôi có thể phá vỡ một vòng lặp bên ngoài với PHP?


124

Tôi đang tìm cách phá vỡ một vòng lặp for / foreach bên ngoài trong PHP.

Điều này có thể được thực hiện trong ActionScript như vậy:

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

PHP tương đương là gì?


7
Luôn luôn xem tài liệu trước: php.net/manual/en/control-strucenses.break.php
Felix Kling

Tôi đã đăng 2 giải pháp, một giải pháp có nhãn, như trong kịch bản hành động và giải pháp khác chỉ sử dụngbreak
Edgar Villegas Alvarado

Câu trả lời:




16

Bạn có thể sử dụng chỉ một câu lệnh break-n:

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

Nếu bạn đang ở php> = 5.3, bạn có thể sử dụng nhãn và gotos, tương tự như trong ActionScript:

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

Nhưng gotophải được sử dụng cẩn thận. Goto là xấu xa (được coi là thực hành xấu)


1
Có những cách sử dụng khá hợp lệ cho goto. Ngay cả eval () không phải là xấu xa (và nó là). Nó thậm chí còn ít sử dụng hơn goto.
lucian303

1
Đúng. Đó là lý do tại sao tôi nói "goto phải được sử dụng cẩn thận"
Edgar Villegas Alvarado

Trong lưu ý rằng tôi tin rằng trang này có liên quan: php.net/manual/en/control-structures.goto.php
Ruggi

12

Bạn có thể sử dụng break 2;để thoát ra khỏi hai vòng cùng một lúc. Nó không hoàn toàn giống như ví dụ của bạn với các vòng lặp "được đặt tên", nhưng nó sẽ thực hiện thủ thuật.


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

Rất vui khi chuyển đổi toàn bộ mã được cung cấp sang PHP, mặc dù câu lệnh break không làm những gì tôi cần nó để làm (nó chỉ kết thúc vòng lặp bên trong).
Marty

làm mới trang của bạn :) Tôi đã thay thế bằng break 2 ... mà theo Hướng dẫn sử dụng PHP: "break chấp nhận một đối số số tùy chọn cho nó biết có bao nhiêu cấu trúc bao quanh được tách ra."
Jordan Arseno

4

Sử dụng goto?

for ($i = 0, $j = 50; $i < 100; $i++) 
{
  while ($j--) 
  {
    if ($j == 17) 
      goto end; 
  }  
}
echo "i = $i";
end:
echo 'j hit 17';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.