Nếu bạn cần làm gì đó cho mọi phần tử ngoại trừ phần tử đầu tiên hoặc phần tử cuối cùng và chỉ khi có nhiều phần tử trong mảng, tôi thích giải pháp sau.
Tôi biết có nhiều giải pháp ở trên và được đăng vài tháng / một năm trước tôi, nhưng đây là điều tôi cảm thấy khá thanh lịch theo đúng nghĩa của nó. Kiểm tra mỗi vòng lặp cũng là một kiểm tra boolean trái ngược với kiểm tra "i = (đếm-1)" số, có thể cho phép ít chi phí hơn.
Cấu trúc của vòng lặp có thể cảm thấy khó xử, nhưng bạn có thể so sánh nó với thứ tự của thead (bắt đầu), t feet (kết thúc), tbody (hiện tại) trong các thẻ bảng 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;
}
Chẳng hạn, trong các thuật ngữ phát triển web, nếu bạn muốn thêm phần dưới cùng cho mọi phần tử ngoại trừ phần tử cuối cùng trong danh sách không có thứ tự (ul), thì bạn có thể thêm phần viền trên cho mọi phần tử trừ phần tử đầu tiên (CSS: con đầu lòng, được hỗ trợ bởi IE7 + và Firefox / Webkit hỗ trợ logic này, trong khi: con cuối không được IE7 hỗ trợ).
Bạn có thể thoải mái sử dụng lại biến $ đầu tiên cho mỗi vòng lặp lồng nhau và mọi thứ sẽ hoạt động tốt vì mỗi vòng lặp làm cho $ đầu tiên sai trong quá trình lặp đầu tiên (do đó, phá vỡ / ngoại lệ sẽ không gây ra vấn đề) .
$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;
Ví dụ đầu ra:
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)