Wenn Sie für jedes Element etwas tun müssen, außer für das erste oder das letzte, und nur wenn das Array mehr als ein Element enthält, bevorzuge ich die folgende Lösung.
Ich weiß, dass es oben viele Lösungen gibt, die Monate / ein Jahr vor meinen veröffentlicht wurden, aber dies ist etwas, das ich für ziemlich elegant halte. Die Prüfung jeder Schleife ist auch eine boolesche Prüfung im Gegensatz zu einer numerischen Prüfung "i = (count-1)", die möglicherweise weniger Overhead ermöglicht.
Die Struktur der Schleife mag sich unangenehm anfühlen, aber Sie können sie mit der Reihenfolge von thead (Anfang), tfoot (Ende), tbody (aktuell) in HTML-Tabellen-Tags vergleichen.
$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;
}
Wenn Sie beispielsweise in Bezug auf die Webentwicklung jedem Element mit Ausnahme des letzten in einer ungeordneten Liste (ul) einen unteren Rand hinzufügen möchten, können Sie stattdessen jedem Element mit Ausnahme des ersten (CSS :) einen oberen Rand hinzufügen. Das erste Kind, das von IE7 + und Firefox / Webkit unterstützt wird, unterstützt diese Logik, während das letzte Kind von IE7 nicht unterstützt wird.
Sie können die Variable $ first auch für jede verschachtelte Schleife wiederverwenden, und die Dinge funktionieren einwandfrei, da jede Schleife $ first während des ersten Prozesses der ersten Iteration falsch macht (sodass Unterbrechungen / Ausnahmen keine Probleme verursachen). .
$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;
Beispielausgabe:
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)