Jeśli musisz zrobić coś dla każdego elementu oprócz pierwszego lub ostatniego i tylko jeśli w tablicy jest więcej niż jeden element, wolę następujące rozwiązanie.
Wiem, że istnieje wiele rozwiązań powyżej i opublikowanych miesiąc / rok przed moim, ale wydaje mi się, że jest to dość eleganckie samo w sobie. Sprawdzanie każdej pętli jest również czekiem logicznym w przeciwieństwie do czeku numerycznego „i = (count-1)”, który może pozwolić na mniejszy narzut.
Struktura pętli może wydawać się niewygodna, ale można ją porównać z kolejnością thead (początek), tfoot (koniec), tbody (bieżący) w znacznikach tabeli 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;
}
Na przykład, jeśli chodzi o tworzenie stron internetowych, jeśli chcesz dodać obramowanie do każdego elementu oprócz ostatniego na liście nieuporządkowanej (ul), możesz zamiast tego dodać obramowanie do każdego elementu oprócz pierwszego (CSS: first-child, obsługiwane przez IE7 + i Firefox / Webkit obsługuje tę logikę, podczas gdy: last-child nie jest obsługiwane przez IE7).
Możesz również ponownie użyć zmiennej $ first dla każdej zagnieżdżonej pętli, a wszystko będzie działać dobrze, ponieważ każda pętla powoduje, że $ first jest fałszywe podczas pierwszego procesu pierwszej iteracji (więc przerwy / wyjątki nie powodują problemów) .
$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;
Przykładowe dane wyjściowe:
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)