ฉันจะทำลายวงนอกด้วย PHP ได้อย่างไร


124

ฉันต้องการทำลายลูปภายนอกสำหรับ / foreach ใน PHP

สิ่งนี้สามารถทำได้ใน ActionScript ดังนี้:

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

PHP เทียบเท่ากับอะไร?


7
โปรดดูเอกสารก่อนเสมอ
Felix Kling

ฉันได้โพสต์วิธีแก้ปัญหา 2 รายการหนึ่งรายการมีป้ายกำกับเช่นเดียวกับสคริปต์การดำเนินการและอื่น ๆ ที่เพิ่งใช้break
Edgar Villegas Alvarado

คำตอบ:



34

คู่มือ PHPกล่าว

break ยอมรับอาร์กิวเมนต์ตัวเลขที่เป็นทางเลือกซึ่งจะบอกจำนวนโครงสร้างการปิดล้อมที่ซ้อนกันที่จะถูกแบ่งออก

break 2;

16

คุณสามารถใช้คำสั่ง break-n:

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

หากคุณอยู่ใน php> = 5.3 คุณสามารถใช้ label และgotos ได้เช่นเดียวกับใน ActionScript:

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

แต่gotoต้องใช้อย่างระมัดระวัง. Goto เป็นสิ่งชั่วร้าย (ถือว่าเป็นการปฏิบัติที่ไม่ดี)


1
มีการใช้ goto ค่อนข้างถูกต้อง แม้แต่ eval () ก็ไม่ใช่สิ่งชั่วร้าย (และเป็น) มีประโยชน์น้อยกว่า goto ด้วยซ้ำ
lucian303

1
ใช่. นั่นเป็นเหตุผลที่ฉันพูดว่า "ต้องใช้ goto อย่างระมัดระวัง"
Edgar Villegas Alvarado

ในบันทึกนั้นฉันเชื่อว่าหน้านี้เกี่ยวข้อง: php.net/manual/th/control-structures.goto.php
Ruggi

12

คุณสามารถใช้break 2;เพื่อแยกออกจากสองลูปพร้อมกันได้ มันไม่เหมือนกับตัวอย่างของคุณที่มีลูป "ชื่อ" แต่มันจะทำเคล็ดลับ


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

ลองแปลงรหัสที่ให้มาทั้งหมดเป็น PHP ได้ดีแม้ว่าคำสั่ง break จะไม่ทำสิ่งที่ฉันต้องการให้ทำ (มันจะจบแค่วงในเท่านั้น)
Marty

รีเฟรชหน้าคุณ :) ฉันแทนที่ด้วยตัวแบ่ง 2 ... ซึ่งตามคู่มือ PHP: "break ยอมรับอาร์กิวเมนต์ตัวเลขที่เป็นทางเลือกซึ่งจะบอกจำนวนโครงสร้างการปิดล้อมที่ซ้อนกันจะถูกแยกออกจาก"
Jordan Arseno

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.