Jika Anda perlu melakukan sesuatu untuk setiap elemen kecuali yang pertama atau yang terakhir dan hanya jika ada lebih dari satu elemen dalam array, saya lebih suka solusi berikut.
Saya tahu ada banyak solusi di atas dan diposting bulan / satu tahun sebelum saya, tetapi ini adalah sesuatu yang saya rasa cukup elegan. Periksa setiap loop juga merupakan cek boolean yang berlawanan dengan cek "i = (count-1)" numerik, yang memungkinkan lebih sedikit overhead.
Struktur loop mungkin terasa aneh, tetapi Anda dapat membandingkannya dengan urutan thead (awal), tfoot (end), tbody (current) dalam tag tabel 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;
}
Misalnya, dalam istilah pengembangan web, jika Anda ingin menambahkan border-bottom ke setiap elemen kecuali yang terakhir di daftar tidak berurutan (ul), maka Anda bisa menambahkan border-top ke setiap elemen kecuali yang pertama (CSS: anak pertama, didukung oleh IE7 + dan Firefox / Webkit mendukung logika ini, sedangkan: anak terakhir tidak didukung oleh IE7).
Anda dapat merasa bebas untuk menggunakan kembali variabel $ first untuk masing-masing dan setiap loop bersarang juga dan semuanya akan berfungsi dengan baik karena setiap loop membuat $ first false selama proses pertama dari iterasi pertama (sehingga istirahat / pengecualian tidak akan menyebabkan masalah) .
$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;
Contoh output:
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)