2010-07-16 18 views
27

Khi tôi thường muốn thoát khỏi vòng lặp foreach trước khi tất cả các lần lặp lại đã hoàn thành, tôi chỉ cần sử dụng ngắt; tuyên bố. ví dụ.Break out out forloop nhưng trong câu lệnh chuyển đổi php

foreach($nodelist as $node) { 
    if($metCriteria) { 
     break; 
    } 
} 

Nhưng ví dụ tiếp theo của tôi có tuyên bố chuyển đổi trong đó. Và nếu một trong những điều kiện được đáp ứng thì tôi cần phải thoát khỏi vòng lặp foreach. (Vấn đề là giờ nghỉ được sử dụng cho câu lệnh switch)

foreach($nodelist as $node) 
{ 
    switch($node->nodeName) { 
     case "a" : 
      //do something 
      break; 
     case "b" : 
      //break out of forloop 
      break; 
    } 
} 

Tôi chỉ đơn giản là thiết lập một biến trong câu lệnh switch sau đó phá vỡ sau nó? ví dụ.

$breakout = false; 
foreach($nodelist as $node) 
{ 
    switch($node->nodeName) { 
     case "a" : 
      //do something 
      break; 
     case "b" : 
      $breakout = true; 
      break; 
    } 
    if($breakout === true) break; 
} 

Đây có phải là giải pháp tốt nhất không? hay cái này theo cách khác?

Trả lời

52

từ sổ tay (break)

nghỉ chấp nhận một đối số tùy chọn mà nói với nó bao nhiêu công trình kèm theo lồng nhau sẽ được chia nhỏ ra khỏi.

+2

+1 con trỏ tuyệt vời .. – pinaki

+2

+1 Đây chính xác là những gì tôi cần. Điểm thưởng cho việc sử dụng cấu trúc ngôn ngữ được tạo sẵn - Tôi đã thực hiện nó theo phong cách @Lizard cho đến bây giờ. –

+0

5.4.0 \t Đã xóa khả năng chuyển các biến (ví dụ: $ num = 2; break $ num;) làm đối số bằng số. –

11

ngắt 2;

nghỉ x sẽ thoát ra khỏi đó nhiều cấp độ

-1

Chỉ cần sử dụng {'s - nó sẽ giữ mã từ "đang chạy". Tốt hơn nhiều so với tuyên bố phá vỡ nếu bạn hỏi tôi.

3

Câu trả lời được chấp nhận không có ví dụ thực tế cho phép tôi chia sẻ với bạn.

break 2 

có nghĩa là thoát khỏi cả hai vòng lặp và chuyển đổi.

$i = 0; 
while (++$i) { 
    switch ($i) { 
    case 5: 
     echo "At 5<br />\n"; 
     break 1; /* Exit only the switch. */ 
    case 10: 
     echo "At 10; quitting<br />\n"; 
     break 2; /* Exit the switch and the while. */ 
    default: 
     break; 
    } 
}