คอมพิวเตอร์ Windows อินเทอร์เน็ต

คำสั่ง PHP foreach เกี่ยวกับความซับซ้อนของ foreach ใน PHP การเปิดอาร์เรย์ที่ซ้อนกันด้วยรายการ ()

The For Each ... วงถัดไปใน VBA Excel, ไวยากรณ์และคำอธิบายของแต่ละส่วนประกอบ ตัวอย่างการใช้ For Each ... Next loop

วง For Each ... Next ใน VBA Excel ได้รับการออกแบบมาเพื่อดำเนินการกลุ่มคำสั่งที่เกี่ยวข้องกับแต่ละองค์ประกอบจากกลุ่มขององค์ประกอบ (ช่วง อาร์เรย์ คอลเลกชัน) การวนซ้ำที่ยอดเยี่ยมนี้ใช้เมื่อไม่ทราบจำนวนองค์ประกอบในกลุ่มและการจัดทำดัชนี มิฉะนั้นควรใช้

สำหรับแต่ละ ... ไวยากรณ์ลูปถัดไป

สำหรับแต่ละองค์ประกอบ ในกลุ่ม [คำสั่ง] [ออกสำหรับ] [คำสั่ง] ถัดไป [องค์ประกอบ]

วี วงเล็บเหลี่ยมแอตทริบิวต์ที่เป็นทางเลือกของ For Each ... Next loop ถูกระบุ

สำหรับแต่ละ ... คอมโพเนนต์ลูปถัดไป

*ถ้าใช้ For Each ... Next loop ใน VBA Excel เพื่อวนซ้ำผ่านองค์ประกอบของคอลเลกชัน (Collection object) หรืออาร์เรย์ แล้วตัวแปร ธาตุต้องประกาศด้วยชนิดข้อมูล ตัวแปรมิฉะนั้นลูปจะไม่ทำงาน

**หากคุณไม่ได้ใช้โค้ดของคุณในลูป ความหมายของการใช้ลูปจะหายไป

สำหรับแต่ละ ... ตัวอย่างลูปถัดไป

วนรอบสำหรับช่วงของเซลล์

บนแผ่นงานที่ใช้งานอยู่ของเวิร์กบุ๊ก Excel ให้เลือกช่วงของเซลล์และเรียกใช้ขั้นตอนต่อไปนี้:

Sub test1 () Dim element As Range, As String a = "ข้อมูลที่ดึงมาจาก For Each ... ถัดไป:" สำหรับแต่ละองค์ประกอบในการเลือก a = a & vbNewLine & "Cell" & element.Address & _ " ประกอบด้วย ค่า: "& CStr (element.Value) ถัดไป MsgBox a End Sub

หน้าต่างข้อมูล MsgBox จะแสดงที่อยู่ของเซลล์ที่เลือกและเนื้อหา หากมี หากเลือกเซลล์จำนวนมาก ข้อมูลที่สมบูรณ์ของทุกเซลล์จะไม่ปรากฏ เนื่องจากความยาวสูงสุดของพารามิเตอร์ พร้อมท์ประมาณ 1,024 อักขระ

ห่วงสำหรับการรวบรวมแผ่น

คัดลอกขั้นตอน VBA ต่อไปนี้ไปยังสมุดงาน Excel:

Sub test2 () Dim element As Worksheet, a As String a = "List of worksheets within this book:" For Each element In Worksheets a = a & vbNewLine & element.Index _ & ")" & element.Name Next MsgBox a จบซับ

หน้าต่างข้อมูล MsgBox จะแสดงรายการชื่อแผ่นงานทั้งหมดของสมุดงาน Excel ตามหมายเลขลำดับของแท็บที่สอดคล้องกับดัชนี

วนรอบสำหรับอาร์เรย์

กำหนดรายชื่อสัตว์ให้กับอาร์เรย์และใน For Each ... Next loop เขียนลงในตัวแปร NS... หน้าต่างข้อมูล MsgBox จะแสดงรายการชื่อสัตว์จากตัวแปร NS.

Sub test3 () Dim element As Variant, a As String, group As Variant group = Array ("hippopotamus", "elephant", "kangaroo", "tiger", "mouse") " แผ่นงาน เช่น กลุ่มที่เลือก: กลุ่ม = การเลือก a = "อาร์เรย์ประกอบด้วยค่าต่อไปนี้:" & vbNewLine สำหรับแต่ละองค์ประกอบ ในกลุ่ม a = a & vbNewLine & องค์ประกอบ Next MsgBox a End Sub

มาทำซ้ำขั้นตอน VBA เดิมกัน แต่ตั้งค่าองค์ประกอบอาร์เรย์ทั้งหมดใน For Each ... Next loop เป็น Parrot หน้าต่างข้อมูล MsgBox จะแสดงรายการชื่อสัตว์ ซึ่งประกอบด้วยนกแก้วเท่านั้น ซึ่งพิสูจน์ความเป็นไปได้ของการแก้ไขค่าขององค์ประกอบอาร์เรย์ใน For Each ... วงถัดไป

Sub test4 () Dim element As Variant, a As String, group As Variant group = Array ("hippopotamus", "elephant", "kangaroo", "tiger", "mouse") " sheet ตัวอย่างที่เลือก: group = Selection a = "อาร์เรย์ประกอบด้วยค่าต่อไปนี้:" & vbNewLine For Each element In group element = "Parrot" a = a & vbNewLine & element Next MsgBox a End Sub

รหัสนี้เหมือนกับทุกอย่างในบทความนี้ได้รับการทดสอบใน Excel 2016

วนรอบเพื่อรวบรวมไดเรกทอรีย่อยและออกจากลูป

ในตัวอย่างนี้ เราจะเพิ่มตัวแปร NSชื่อของไดเรกทอรีย่อยบนดิสก์ คอมพิวเตอร์ของคุณ. เมื่อวัฏจักรถึงโฟลเดอร์ ไฟล์โปรแกรมจะเป็นการเพิ่มตัวแปร NSชื่อและข้อความ: “พอแล้ว ฉันจะไม่อ่านต่อ! ขอแสดงความนับถือ For Each ... วงถัดไป "

Sub test5 () Dim FSO เป็น Object, myFolders As Object, myFolder As Object, a As String "สร้าง FileSystemObject ใหม่และกำหนดให้กับ" FSO "variable Set FSO = CreateObject (" Scripting.FileSystemObject ")" แยกรายการ ไดเรกทอรีย่อยบนดิสก์ "C "และกำหนด" ให้กับตัวแปร "myFolders" ตั้งค่า myFolders = FSO.GetFolder ("C: \") a = "โฟลเดอร์บนดิสก์ C:" & vbNewLine "วนรอบรายการไดเรกทอรีย่อยและเพิ่ม ตั้งชื่อตัวแปร" a "" หลังจากไปถึงโฟลเดอร์ "Program Files" แล้ว ให้ออกจากลูป For Each myFolder In myFolders.SubFolders a = a & vbNewLine & myFolder.Name ถ้า myFolder.Name = "Program Files" แล้ว a = a & vbNewLine & vbNewLine & "พอ อ่านต่อ ฉันจะไม่!" "_ & vbNewLine & vbNewLine &" ขอแสดงความนับถือ "& vbNewLine & _" ของคุณสำหรับแต่ละ ... วนซ้ำ "Exit For End If Next Set FSO = Nothing MsgBox จบซับ

หน้าต่างข้อมูล MsgBox จะแสดงรายการชื่อของไดเรกทอรีย่อยบนดิสก์ คอมพิวเตอร์ของคุณไปยังโฟลเดอร์ ไฟล์โปรแกรมรวมและข้อความของวงจรเกี่ยวกับการยุติการทำงาน

จากการทำงานของโปรแกรม ไม่เพียงแต่ชื่อของไดเรกทอรีย่อยที่มองเห็นได้เมื่อคุณนำทางไปยังดิสก์ใน explorer เท่านั้นที่จะแสดง แต่ยังซ่อนเร้นและ โฟลเดอร์บริการ... เพื่อดูรายการไดเรกทอรีย่อยทั้งหมดบนดิสก์ , แสดงความคิดเห็นส่วนรหัสจาก ถ้าก่อน จบถ้ารวมและเรียกใช้ขั้นตอนในตัวแก้ไข VBA Excel

ทำในขณะที่และ foreach ลูป

ทำลูป ... ... ในขณะที่

การทำ ... while loopใน C # เป็นเวอร์ชันหลังเงื่อนไขของ while ซึ่งหมายความว่ามีการตรวจสอบเงื่อนไขของลูปหลังจากดำเนินการเนื้อหาของลูป ดังนั้น do ... while loops จึงมีประโยชน์ในสถานการณ์ที่กลุ่มคำสั่งต้องดำเนินการอย่างน้อยหนึ่งครั้ง ต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่ง do-while loop:

ทำ (คำสั่ง;) ในขณะที่ (เงื่อนไข);

หากมีโอเปอเรเตอร์เพียงตัวเดียว วงเล็บปีกกาจะเป็นทางเลือกในสัญกรณ์นี้ อย่างไรก็ตาม มักใช้เพื่อทำให้โครงสร้าง do-while อ่านง่ายขึ้นและไม่ต้องสับสนกับโครงสร้าง while do-while loop จะทำงานตราบเท่าที่นิพจน์เงื่อนไขเป็นจริง ตัวอย่างของการใช้ลูป do-while คือโปรแกรมต่อไปนี้ที่คำนวณแฟกทอเรียลของตัวเลข:

การใช้ระบบ ใช้ System.Collections.Generic; ใช้ System.Linq; ใช้ System.Text; namespace ConsoleApplication1 (โปรแกรมคลาส (static void Main (สตริง args)) (ลอง (// คำนวณแฟคทอเรียลของ int i, ผลลัพธ์ = 1, num = 1; Console.WriteLine ("Enter a number:"); i = int.Parse (Console .ReadLine ()); Console.Write ("\ n \ nFactorial (0) =", i); do (ผลลัพธ์ * = num; num ++;) ในขณะที่ (num

Foreach ลูป

Foreach loopใช้สำหรับการเข้าถึงองค์ประกอบของคอลเลกชันแบบวนซ้ำ ซึ่งเป็นกลุ่มของอ็อบเจ็กต์ C # กำหนดคอลเล็กชันหลายประเภทซึ่งแต่ละประเภทเป็นอาร์เรย์ ต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่ง foreach loop:

foreach (ประเภท loop_variable_name ในคอลเลกชัน) ตัวดำเนินการ;

ที่นี่ พิมพ์ cycle_variable_nameหมายถึงชนิดและชื่อของตัวแปรควบคุมลูปที่ได้รับค่าของรายการถัดไปในคอลเล็กชันที่แต่ละขั้นตอนของลูป foreach และคอลเล็กชันหมายถึงคอลเล็กชันที่สำรวจตามวัฏจักร ซึ่งต่อไปนี้คืออาร์เรย์ ดังนั้น ชนิดของตัวแปรลูปต้องตรงกับชนิดขององค์ประกอบอาร์เรย์ นอกจากนี้ยังสามารถระบุประเภทได้ คำสำคัญวาร์ ในกรณีนี้ คอมไพเลอร์จะกำหนดประเภทของตัวแปรลูปตามประเภทขององค์ประกอบอาร์เรย์ ซึ่งจะเป็นประโยชน์ในการจัดการกับคำค้นหาบางประเภท แต่ตามกฎแล้วจะมีการระบุประเภทอย่างชัดเจน

คำสั่ง foreach loop ทำงานดังนี้ เมื่อการวนซ้ำเริ่มต้น องค์ประกอบแรกของอาร์เรย์จะถูกเลือกและกำหนดให้กับตัวแปรลูป ในแต่ละขั้นตอนที่ตามมาของการวนซ้ำ อิลิเมนต์ถัดไปของอาร์เรย์จะถูกเลือกและเก็บไว้ในตัวแปรลูป การวนซ้ำจะสิ้นสุดลงเมื่อองค์ประกอบทั้งหมดของอาร์เรย์ถูกเลือก

ลูป foreach ช่วยให้คุณวนซ้ำแต่ละรายการในคอลเล็กชัน (อ็อบเจ็กต์ที่แสดงรายการของอ็อบเจ็กต์อื่นๆ) อย่างเป็นทางการ เพื่อให้บางสิ่งได้รับการพิจารณาว่าเป็นคอลเล็กชัน จะต้องสนับสนุนอินเทอร์เฟซ IEnumerable ตัวอย่างของคอลเล็กชัน ได้แก่ อาร์เรย์ C # คลาสคอลเลคชันจากเนมสเปซ System.Collection และคลาสคอลเล็กชันแบบกำหนดเอง

(PHP 4, PHP 5, PHP 7)

ออกแบบ แต่ละมีวิธีง่ายๆ ในการวนซ้ำอาร์เรย์ แต่ละใช้งานได้กับอาร์เรย์และอ็อบเจ็กต์เท่านั้น และจะสร้างข้อผิดพลาดเมื่อพยายามใช้กับตัวแปรประเภทอื่นหรือตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้น ไวยากรณ์มีสองประเภท:

foreach (array_expression เป็นค่า $) คำสั่ง foreach (array_expression เป็น $ key => $ value)

ลูปแรกวนซ้ำบนอาร์เรย์ที่ระบุด้วย array_expression... ในการวนซ้ำแต่ละครั้ง ค่าขององค์ประกอบปัจจุบันถูกกำหนดให้กับตัวแปร มูลค่า $และตัวชี้ภายในของอาร์เรย์เพิ่มขึ้นหนึ่งตัว (ดังนั้น ในการวนซ้ำครั้งต่อไปของลูป งานจะเกิดขึ้นกับองค์ประกอบถัดไป)

ลูปที่สองจะเชื่อมโยงคีย์ขององค์ประกอบปัจจุบันกับตัวแปรเพิ่มเติม $ คีย์ในการทำซ้ำแต่ละครั้ง

ความคิดเห็น:

เมื่อผู้ประกอบการ แต่ละเริ่มดำเนินการ ตัวชี้ภายในของอาร์เรย์จะถูกตั้งค่าเป็นองค์ประกอบแรกโดยอัตโนมัติ ซึ่งหมายความว่าไม่จำเป็นต้องเรียกใช้ฟังก์ชัน รีเซ็ต ()ก่อนใช้ลูป แต่ละ.

ตั้งแต่ตัวดำเนินการ แต่ละอาศัยตัวชี้อาร์เรย์ภายใน การเปลี่ยนแปลงภายในลูปอาจนำไปสู่พฤติกรรมที่คาดเดาไม่ได้

เพื่อที่จะเปลี่ยนอิลิเมนต์ของอาร์เรย์ภายในลูปได้โดยตรง ตัวแปร มูลค่า $ต้องนำหน้าด้วย &. ในกรณีนี้ ค่าจะถูกกำหนดโดยการอ้างอิง

$ arr = อาร์เรย์ (1, 2, 3, 4);
foreach ($ arr เป็น & $ ค่า) (
ค่า $ = ค่า $ * 2;
}
// $ arr ตอนนี้เป็นอาร์เรย์ (2, 4, 6, 8)
ยกเลิกการตั้งค่า (มูลค่า $); // ทำลายลิงค์ไปยังองค์ประกอบสุดท้าย
?>

ชี้ไปที่ มูลค่า $เป็นไปได้ก็ต่อเมื่ออาร์เรย์ที่วนซ้ำสามารถอ้างอิงได้ (เช่น ถ้าเป็นตัวแปร) รหัสต่อไปนี้จะไม่ทำงาน:

foreach (อาร์เรย์ (1, 2, 3, 4) เป็น & $ ค่า) (
ค่า $ = ค่า $ * 2;
}
?>

ความสนใจ

ลิงค์ มูลค่า $องค์ประกอบสุดท้ายของอาร์เรย์ยังคงอยู่แม้หลังจากโอเปอเรเตอร์ แต่ละทำงานเสร็จ. ขอแนะนำให้ทำลายโดยใช้ฟังก์ชัน ยกเลิกการตั้งค่า ().

ความคิดเห็น:

โอเปอเรเตอร์ แต่ละไม่รองรับความสามารถในการระงับข้อความแสดงข้อผิดพลาดโดยใช้คำนำหน้า "@"

คุณอาจสังเกตเห็นว่าโครงสร้างต่อไปนี้มีลักษณะการทำงานเหมือนกัน:


รีเซ็ต ($ arr);
ในขณะที่ (รายการ (, $ ค่า) = แต่ละ ($ arr)) (
echo "ค่า: $ value
\ NS ";
}

foreach ($ arr เป็น $ มูลค่า) (
echo "ค่า: $ value
\ NS ";
}
?>

โครงสร้างต่อไปนี้ยังใช้งานได้เหมือนกัน:

$ arr = อาร์เรย์ ("หนึ่ง", "สอง", "สาม");
รีเซ็ต ($ arr);
ในขณะที่ (รายการ ($ คีย์, $ ค่า) = แต่ละ ($ arr)) (

\ NS ";
}

foreach ($ arr เป็น $ key => $ value) (
echo "คีย์: คีย์ $ ค่า: $ value
\ NS ";
}
?>

ต่อไปนี้คือตัวอย่างเพิ่มเติมบางส่วนที่สาธิตการใช้โอเปอเรเตอร์:

/ * ตัวอย่าง 1: ค่าเท่านั้น * /

$ a = อาร์เรย์ (1, 2, 3, 17);

foreach ($ a เป็น $ v) (
เสียงก้อง "ค่าปัจจุบันของตัวแปร \ $:$ v. \ n ";
}

/ * ตัวอย่าง 2: ค่า (สำหรับภาพประกอบ อาร์เรย์จะส่งออกเป็นค่าด้วยคีย์) * /

$ a = อาร์เรย์ (1, 2, 3, 17);

$ i = 0; / * เพื่อความชัดเจนเท่านั้น * /

Foreach ($ a เป็น $ v) (
echo "\ $ a [$ i] => $ v. \ n";
$ ฉัน ++;
}

/ * ตัวอย่าง 3: คีย์และค่า * /

$ a = อาร์เรย์ (
"หนึ่ง" => 1,
"สอง" => 2,
"สาม" => 3,
"สิบเจ็ด" => 17
);

foreach ($ a เป็น $ k => $ v) (
echo "\ $ a [$ k] => $ v. \ n";
}

/ * ตัวอย่างที่ 4: อาร์เรย์หลายมิติ * /
$ a = อาร์เรย์ ();
$ a [0] [0] = "a";
$ a [0] [1] = "b";
$ a [1] [0] = "y";
$ a [1] [1] = "z";

foreach ($ a เป็น $ v1) (
foreach ($ v1 เป็น $ v2) (
echo "$ v2 \ n";
}
}

/ * ตัวอย่างที่ 5: อาร์เรย์ไดนามิก * /

Foreach (อาร์เรย์ (1, 2, 3, 4, 5) เป็น $ v) (
echo "$ v \ n";
}
?>

การเปิดอาร์เรย์ที่ซ้อนกันด้วยรายการ ()

(PHP 5> = 5.5.0, PHP 7)

PHP 5.5 เพิ่มความสามารถในการสำรวจอาร์เรย์ของอาร์เรย์ด้วยการคลายอาร์เรย์ที่ซ้อนกันลงในตัวแปรลูปโดยการส่งผ่าน รายการ ()เป็นค่า

โครงสร้าง foreach เป็นรสชาติของการรวมในภาษาเพื่อให้ง่ายต่อการทำซ้ำองค์ประกอบของอาร์เรย์ คำสั่ง foreach มีสองรสชาติ โดยกำหนดเป้าหมายอาร์เรย์ประเภทต่างๆ:

foreach (อาร์เรย์เป็นองค์ประกอบ $) (

foreach (อาร์เรย์เป็น $ คีย์ => $ องค์ประกอบ) (

ตัวอย่างเช่น เมื่อรันข้อมูลโค้ดต่อไปนี้:

$ menu = аrrау ("พาสต้า", "สเต็ก", "มันฝรั่ง", "ปลา", "มันฝรั่งทอด");

foreach ($ เมนูเป็น $ รายการ) (

พิมพ์ "$ รายการ
";

ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น:

ในตัวอย่างนี้ ควรสังเกตสองสิ่ง อย่างแรก โครงสร้าง foreach จะกลับไปที่จุดเริ่มต้นของอาร์เรย์โดยอัตโนมัติ (สิ่งนี้จะไม่เกิดขึ้นในโครงสร้างการวนซ้ำอื่นๆ) ประการที่สอง ไม่จำเป็นต้องเพิ่มตัวนับอย่างชัดเจนหรือย้ายไปยังองค์ประกอบถัดไปในอาร์เรย์ - สิ่งนี้จะเกิดขึ้นโดยอัตโนมัติกับการวนซ้ำแต่ละครั้งของ foreach

ตัวเลือกที่สองจะใช้เมื่อทำงานกับอาร์เรย์ที่เชื่อมโยง:

$ wine_inventory = อาร์เรย์ (

"เมอร์โล" => 15,

"ซินฟานเดล" => 17,

"โซวีญง" => 32

foreach ($ wine_inventory เป็น $ i => $ item_count) (

พิมพ์ "$ item_count จำนวน $ i ที่เหลืออยู่
";

ในกรณีนี้ ผลลัพธ์จะมีลักษณะดังนี้:

เมอร์ล็อตเหลือ 15 ขวด

ซินฟานเดลเหลือ 17 ขวด

โซวีญงเหลือ32ขวด

ดังที่คุณเห็นจากตัวอย่างข้างต้น โครงสร้าง foreach ทำให้การทำงานกับอาร์เรย์ง่ายขึ้นมาก

หลักการทำงานของโครงสร้างสวิตช์ค่อนข้างคล้ายกับถ้า - ผลลัพธ์ที่ได้รับเมื่อประเมินนิพจน์จะถูกตรวจสอบกับรายการของการจับคู่ที่เป็นไปได้

สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อตรวจสอบค่าหลายค่า เนื่องจากการใช้สวิตช์ทำให้โปรแกรมมีรายละเอียดและกระชับมากขึ้น รูปแบบทั่วไปของคำสั่ง switch คือ:

สวิตช์ (นิพจน์) (

กรณี (เงื่อนไข):

กรณี (เงื่อนไข):

เงื่อนไขที่จะตรวจสอบจะแสดงอยู่ในวงเล็บหลังคีย์เวิร์ด switch ผลลัพธ์ของการคำนวณจะถูกเปรียบเทียบกับเงื่อนไขในส่วนเคสตามลำดับ หากพบการจับคู่ บล็อกของส่วนที่เกี่ยวข้องจะถูกดำเนินการ หากไม่พบรายการที่ตรงกัน ระบบจะดำเนินการบล็อกส่วนเริ่มต้นที่เป็นทางเลือก

ดังที่คุณจะเห็นในบทต่อไปนี้ จุดแข็งประการหนึ่งของ PHP คือการจัดการอินพุตของผู้ใช้ สมมติว่าโปรแกรมแสดงรายการดรอปดาวน์พร้อมตัวเลือกมากมาย และแต่ละบรรทัดของรายการสอดคล้องกับคำสั่งบางคำสั่งที่ดำเนินการในโครงสร้างเคสที่แยกจากกัน สะดวกในการสร้างการใช้งานโดยใช้คำสั่ง switch:

$ user_input = "สูตร"; // คำสั่งที่เลือกโดยผู้ใช้

สวิตช์ ($ user_input):

กรณี ("ค้นหา"):

พิมพ์ "มา" ดำเนินการค้นหา! ";

กรณี ("พจนานุกรม"):

พิมพ์ "คุณต้องการค้นหาคำใด";

กรณี ("สูตร"):

พิมพ์ "นี่คือรายการสูตร ... ";

พิมพ์ "นี่คือเมนู ... ";

ดังที่คุณเห็นจากตัวอย่างด้านบน คำสั่ง switch ให้การจัดระเบียบโค้ดที่ชัดเจนและใช้งานง่าย ตัวแปรที่ระบุในส่วนคำสั่งของสวิตช์ (ในตัวอย่างนี้ $ user_input) จะถูกเปรียบเทียบกับเงื่อนไขของส่วนเคสที่ตามมาทั้งหมด หากค่าที่ระบุในส่วนเคสตรงกับค่าของตัวแปรที่เปรียบเทียบ บล็อกของส่วนนี้จะถูกดำเนินการ คำสั่ง break ป้องกันไม่ให้ส่วนเคสเพิ่มเติมถูกตรวจสอบและยุติคำสั่ง switch หากไม่ตรงตามเงื่อนไขที่เลือกไว้ ระบบจะเรียกส่วนเริ่มต้นที่ไม่บังคับ หากไม่มีส่วนดีฟอลต์และไม่มีเงื่อนไขใดๆ ตรงตามเงื่อนไข คำสั่ง switch จะหยุดลงและการทำงานของโปรแกรมจะดำเนินต่อไปด้วยคำสั่งถัดไป

คุณต้องจำไว้ว่าหากไม่มีคำสั่ง break ในส่วน case (ดูส่วนถัดไป) การดำเนินการของสวิตช์จะดำเนินต่อไปในคำสั่งถัดไป จนกว่าจะพบคำสั่ง break หรือถึงจุดสิ้นสุดของคำสั่ง switch ตัวอย่างต่อไปนี้แสดงให้เห็นถึงผลที่ตามมาของการพลาดคำสั่ง break ที่ลืมไป: $ value = 0.4;

สวิตช์ ($ ค่า):

พิมพ์ "ค่าคือ 0.4
";

พิมพ์ "ค่าคือ 0.6
";

พิมพ์ "ค่าคือ0.3
";

พิมพ์ "คุณไม่ได้" เลือกค่า! ";

ผลลัพธ์มีลักษณะดังนี้:

การไม่มีคำสั่ง break ส่งผลให้ไม่เพียงแต่คำสั่งพิมพ์ถูกดำเนินการในส่วนที่พบที่ตรงกัน แต่ยังรวมถึงคำสั่งพิมพ์ในส่วนถัดไปด้วย จากนั้น การดำเนินการของคำสั่งสวิตช์ถูกขัดจังหวะโดยคำสั่ง switch หลังจากคำสั่งพิมพ์ครั้งที่สอง

ทางเลือกระหว่างสวิตช์และคำสั่ง if แทบไม่มีผลกระทบต่อประสิทธิภาพของโปรแกรม การตัดสินใจใช้สิ่งก่อสร้างนี้หรือสิ่งก่อสร้างนั้นค่อนข้างเป็นเรื่องส่วนตัวของโปรแกรมเมอร์

คำสั่ง break จะขัดจังหวะการดำเนินการของ while, for หรือ switch ในทันทีที่คำสั่งนั้นตั้งอยู่ คำสั่งนี้ถูกกล่าวถึงแล้วในส่วนก่อนหน้า แต่การขัดจังหวะการวนซ้ำปัจจุบันไม่ได้ทำให้ความสามารถของคำสั่ง break หมดไป โดยทั่วไป ไวยากรณ์ตัวแบ่งจะมีลักษณะดังนี้:

พารามิเตอร์ทางเลือก n ระบุจำนวนระดับของโครงสร้างการควบคุมที่จะยุติโดยคำสั่ง break ตัวอย่างเช่น หากการแบ่งซ้อนภายในสองคำสั่ง while และหมายเลข 2 อยู่หลังการหยุดพัก การวนซ้ำทั้งสองจะออกจากทันที ค่าเริ่มต้นสำหรับ n คือ 1; การไปที่ระดับหนึ่งสามารถระบุได้โดยการบ่งชี้ที่ชัดเจนของ 1 หรือโดยการระบุคำสั่ง break โดยไม่มีพารามิเตอร์ โปรดทราบว่าคำสั่ง i f ไม่ใช่หนึ่งในโครงสร้างการควบคุมที่ถูกขัดจังหวะโดยคำสั่ง break

บ่อยครั้งที่คุณต้องผ่านองค์ประกอบทั้งหมดของอาร์เรย์ PHP และดำเนินการบางอย่างกับแต่ละองค์ประกอบ ตัวอย่างเช่น คุณสามารถส่งออกแต่ละค่าไปยังตาราง HTML หรือคุณสามารถกำหนดค่าใหม่ให้กับแต่ละองค์ประกอบ

ในบทนี้ เราจะดูโครงสร้าง foreach เมื่อวนลูปผ่านอาร์เรย์ที่จัดทำดัชนีและเชื่อมโยงกัน

วนรอบค่าองค์ประกอบ

กรณีการใช้งานที่ง่ายที่สุดสำหรับ foreach คือเมื่อวนรอบค่าในอาร์เรย์ที่จัดทำดัชนี ไวยากรณ์พื้นฐาน:

Foreach ($ array as $ value) (// Do something with $ value) // ที่นี่โค้ดจะถูกดำเนินการหลังจากสิ้นสุดการวนซ้ำ

ตัวอย่างเช่น สคริปต์ต่อไปนี้จะวนรอบรายชื่อกรรมการในอาร์เรย์ที่จัดทำดัชนีและพิมพ์ชื่อแต่ละรายการ:

$ กรรมการ = อาร์เรย์ ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); foreach ($ กรรมการเป็น $ ผู้กำกับ) ( echo $ ผู้กำกับ "
"; }

รหัสด้านบนจะส่งออก:

Alfred Hitchcock Stanley Kubrick Martin Scorsese Fritz Lang

วนซ้ำคีย์และค่า

แล้วอาร์เรย์ที่เกี่ยวข้องล่ะ? เมื่อใช้อาร์เรย์ประเภทนี้ คุณมักจะต้องมีสิทธิ์เข้าถึงคีย์ของแต่ละองค์ประกอบรวมถึงค่าขององค์ประกอบด้วย โครงสร้าง foreach มีวิธีการทำงานนี้ให้สำเร็จ:

Foreach ($ array as $ key => $ value) (// Do something with $ key and / or $ value) // ที่นี่โค้ดจะถูกดำเนินการหลังจากสิ้นสุดลูป

ตัวอย่างการจัดลูปผ่านอาร์เรย์ที่เกี่ยวข้องกับข้อมูลเกี่ยวกับภาพยนตร์ แสดงคีย์ของแต่ละองค์ประกอบและค่าในรายการคำจำกัดความ HTML:

$ movie = array ("title" => "Rear Window", "director" => "Alfred Hitchcock", "ปี" => 1954, "นาที" => 112); เสียงสะท้อน "

"; foreach ($ ภาพยนตร์เป็น $ key => $ value) (echo"
$ คีย์:
"; เอคโค่"
มูลค่า $
";) ก้อง"
";

สคริปต์นี้จะแสดงผลเมื่อดำเนินการ:

ชื่อเรื่อง: Rear Window director: Alfred Hitchcock ปี: 1954 นาที: 112

การเปลี่ยนค่าขององค์ประกอบ

แต่สิ่งที่เกี่ยวกับการเปลี่ยนแปลงในค่าขององค์ประกอบในระหว่างการวนซ้ำ? คุณสามารถลองใช้รหัสดังนี้:

Foreach ($ myArray เป็น $ value) ($ value = 123;)

อย่างไรก็ตาม หากคุณเรียกใช้เพื่อดำเนินการ คุณจะพบว่าค่าในอาร์เรย์ ห้ามเปลี่ยน... เหตุผลก็คือ foreach ทำงานร่วมกับ คัดลอกค่าอาร์เรย์ ไม่ใช่ค่าดั้งเดิม ซึ่งจะทำให้อาร์เรย์เดิมไม่เสียหาย

ในการเปลี่ยนค่าของอาร์เรย์ คุณต้องมี ลิงค์เกี่ยวกับมูลค่า ในการทำเช่นนี้ คุณต้องใส่เครื่องหมาย & ข้างหน้าตัวแปรค่าในโครงสร้าง foreach:

Foreach ($ myArray เป็น & $ value) ($ value = 123;)

ตัวอย่างเช่น สคริปต์ต่อไปนี้จะวนซ้ำในแต่ละองค์ประกอบของ (ชื่อผู้กำกับ) ในอาร์เรย์ $ กรรมการ และใช้ฟังก์ชัน PHP ระเบิด () และโครงสร้างรายการเพื่อสลับชื่อและนามสกุล:

$ กรรมการ = อาร์เรย์ ("Alfred Hitchcock", "Stanley Kubrick", "Martin Scorsese", "Fritz Lang"); // เปลี่ยนรูปแบบชื่อสำหรับแต่ละองค์ประกอบ foreach ($ กรรมการเป็น & $ ผู้อำนวยการ) (รายการ ($ ชื่อ, $ นามสกุล) = ระเบิด ("", $ ผู้กำกับ); $ director = "$ นามสกุล, $ ชื่อแรก";) ไม่ได้ตั้งค่า ( $ ผู้กำกับ); // พิมพ์ผลลัพธ์สุดท้าย foreach ($ director เป็น $ director) (echo $ director. "
"; }

สคริปต์จะส่งออก:

ฮิตช์ค็อก, อัลเฟรด คูบริก, สแตนลีย์ สกอร์เซซี่, มาร์ติน แลงก์, ฟริตซ์

โปรดทราบว่าสคริปต์เรียกใช้ฟังก์ชัน unset () เพื่อลบตัวแปร $ director หลังจากที่ลูปแรกเสร็จสิ้น นี่เป็นแนวทางปฏิบัติที่ดีหากคุณวางแผนที่จะใช้ตัวแปรภายหลังในสคริปต์ในบริบทอื่น

หากคุณไม่ลบลิงก์ แสดงว่ามีความเสี่ยงในการดำเนินการต่อไปของโค้ดของการอ้างอิงแบบสุ่มไปยังองค์ประกอบสุดท้ายในอาร์เรย์ ("Lang, Fritz") หากคุณยังคงใช้ตัวแปร $ director ซึ่ง จะนำไปสู่ผลที่คาดไม่ถึง!

สรุป

ในบทช่วยสอนนี้ เราได้ศึกษาวิธีการใช้ PHP foreach construct เพื่อวนรอบองค์ประกอบต่างๆ ของอาร์เรย์ ประเด็นต่อไปนี้ได้รับการพิจารณา:

  • วิธีการวนซ้ำองค์ประกอบของอาร์เรย์
  • วิธีเข้าถึงคีย์และค่าของแต่ละรายการ
  • วิธีใช้การอ้างอิงเพื่อเปลี่ยนค่าขณะเดินผ่านลูป