Si vous devez faire quelque chose pour chaque élément sauf le premier ou le dernier et seulement s'il y a plus d'un élément dans le tableau, je préfère la solution suivante.
Je sais qu'il existe de nombreuses solutions ci-dessus et publiées des mois / un an avant le mien, mais c'est quelque chose que je trouve assez élégant en soi. La vérification de chaque boucle est également une vérification booléenne par opposition à une vérification numérique "i = (count-1)", qui peut permettre de réduire les frais généraux.
La structure de la boucle peut sembler gênante, mais vous pouvez la comparer à l'ordre de la tête (début), tfoot (fin), tbody (actuel) dans les balises de table 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;
}
Par exemple, en termes de développement Web, si vous souhaitez ajouter une bordure inférieure à chaque élément à l'exception du dernier d'une liste non ordonnée (ul), vous pouvez plutôt ajouter une bordure supérieure à chaque élément sauf le premier (le CSS: premier enfant, pris en charge par IE7 + et Firefox / Webkit prend en charge cette logique, alors que: dernier enfant n'est pas pris en charge par IE7).
Vous pouvez vous sentir libre de réutiliser la variable $ first pour chaque boucle imbriquée également et les choses fonctionneront très bien puisque chaque boucle rend $ first faux pendant le premier processus de la première itération (donc les ruptures / exceptions ne causeront pas de problèmes) .
$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;
Exemple de sortie:
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)