Se devi fare qualcosa per ogni elemento tranne il primo o l'ultimo e solo se nell'array è presente più di un elemento, preferisco la seguente soluzione.
So che ci sono molte soluzioni sopra e pubblicate mesi / un anno prima della mia, ma questo è qualcosa che ritengo abbastanza elegante a sé stante. Il controllo di ogni ciclo è anche un controllo booleano rispetto a un controllo numerico "i = (count-1)", che può consentire un minor sovraccarico.
La struttura del loop può sembrare scomoda, ma puoi confrontarla con l'ordinamento di thead (inizio), tfoot (fine), tbody (corrente) nei tag della tabella 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;
}
Ad esempio, in termini di sviluppo Web, se si desidera aggiungere un bordo inferiore a ogni elemento tranne l'ultimo in un elenco non ordinato (ul), è possibile invece aggiungere un bordo superiore a ogni elemento tranne il primo (CSS: first-child, supportato da IE7 + e Firefox / Webkit supporta questa logica, mentre: last-child non è supportato da IE7).
Puoi sentirti libero di riutilizzare anche la prima variabile $ per ogni ciclo nidificato e le cose funzioneranno bene poiché ogni ciclo rende $ first falso durante il primo processo della prima iterazione (quindi interruzioni / eccezioni non causeranno problemi) .
$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;
Esempio di 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)