Si necesita hacer algo para cada elemento, excepto el primero o el último y solo si hay más de un elemento en la matriz, prefiero la siguiente solución.
Sé que hay muchas soluciones anteriores y publicadas meses / un año antes que la mía, pero esto es algo que creo que es bastante elegante en sí mismo. La comprobación de cada bucle también es una comprobación booleana en lugar de una comprobación numérica "i = (cuenta-1)", que puede permitir menos gastos generales.
La estructura del bucle puede parecer incómoda, pero puede compararla con el orden de thead (principio), tfoot (final), tbody (actual) en las etiquetas de tabla 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;
}
Por ejemplo, en términos de desarrollo web, si desea agregar un borde inferior a cada elemento, excepto el último en una lista desordenada (ul), puede agregar un borde superior a cada elemento excepto el primero (el CSS: first-child, compatible con IE7 + y Firefox / Webkit admite esta lógica, mientras que: last-child no es compatible con IE7).
Puede sentirse libre de reutilizar la variable $ first para todos y cada uno de los bucles anidados y las cosas funcionarán bien, ya que cada bucle hace que $ first sea falso durante el primer proceso de la primera iteración (por lo que los saltos / excepciones no causarán problemas) .
$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;
Salida de ejemplo:
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)