หากคุณต้องการทำบางสิ่งบางอย่างสำหรับทุกองค์ประกอบยกเว้นทั้งตัวแรกและตัวสุดท้ายและเฉพาะในกรณีที่มีมากกว่าหนึ่งองค์ประกอบในอาร์เรย์ฉันชอบวิธีต่อไปนี้
ฉันรู้ว่ามีวิธีแก้ปัญหาหลายอย่างข้างต้นและโพสต์เดือน / หนึ่งปีก่อนหน้าของฉัน แต่นี่คือสิ่งที่ฉันรู้สึกว่าค่อนข้างสง่างามในสิทธิของตนเอง การตรวจสอบทุกลูปเป็นการตรวจสอบบูลีนซึ่งต่างจากการตรวจสอบตัวเลข "i = (นับ -1)" ซึ่งอาจทำให้ค่าใช้จ่ายน้อยลง
โครงสร้างของลูปอาจรู้สึกอึดอัดใจ แต่คุณสามารถเปรียบเทียบกับการเรียงลำดับของ thead (เริ่มต้น), tfoot (สิ้นสุด), tbody (ปัจจุบัน) ในแท็กตาราง HTML
$first = true;
foreach($array as $key => $value) {
if ($first) {
$first = false;
// Do what you want to do before the first element
echo "List of key, value pairs:\n";
} else {
// Do what you want to do at the end of every element
// except the last, assuming the list has more than one element
echo "\n";
}
// Do what you want to do for the current element
echo $key . ' => ' . $value;
}
ตัวอย่างเช่นในแง่การพัฒนาเว็บหากคุณต้องการเพิ่มเส้นขอบด้านล่างให้กับทุกองค์ประกอบยกเว้นรายการสุดท้ายในรายการที่ไม่เรียงลำดับ (ul) คุณสามารถเพิ่มเส้นขอบด้านบนลงในทุกองค์ประกอบยกเว้นองค์ประกอบแรก (CSS: ลูกคนแรกได้รับการสนับสนุนโดย IE7 + และ Firefox / Webkit สนับสนุนตรรกะนี้ในขณะที่: ลูกคนสุดท้ายไม่ได้รับการสนับสนุนโดย IE7)
คุณสามารถนำตัวแปร $ first มาใช้ซ้ำสำหรับแต่ละลูปที่ซ้อนกันได้และทุกอย่างจะทำงานได้ดีเนื่องจากทุกลูปจะทำให้ $ First เป็นเท็จในระหว่างกระบวนการแรกของการทำซ้ำครั้งแรก (ดังนั้นการแบ่ง / ข้อยกเว้นจะไม่ทำให้เกิดปัญหา) .
$first = true;
foreach($array as $key => $subArray) {
if ($first) {
$string = "List of key => value array pairs:\n";
$first = false;
} else {
echo "\n";
}
$string .= $key . '=>(';
$first = true;
foreach($subArray as $key => $value) {
if ($first) {
$first = false;
} else {
$string .= ', ';
}
$string .= $key . '=>' . $value;
}
$string .= ')';
}
echo $string;
ตัวอย่างผลลัพธ์:
List of key => value array pairs:
key1=>(v1_key1=>v1_val1, v1_key2=>v1_val2)
key2=>(v2_key1=>v2_val1, v2_key2=>v2_val2, v2_key3=>v2_val3)
key3=>(v3_key1=>v3_val1)