Quello che farei è rimuovere il primo elemento prima del ciclo. Crea un nuovo array se necessario. Spiega in un commento perché lo stai facendo. E poi fai un semplice foreach.
$arrayCopy = $array; // in case you don't want to touch the original array
array_shift($arrayCopy); // removing first element because of X reason.
foreach($arrayCopy => $element) {
// do stuff
}
In questo modo il tuo intento è perfettamente chiaro.
Per chiarire ulteriormente, puoi avvolgere il codice in un metodo con un nome appropriato per renderlo più chiaro.
function doStuffToAllButTheFirst($array) { // this copies the original array, so there are no sideffects
array_shift($array);
foreach($array => $element) { // do stuff }
}
Tuttavia tutto questo manca ancora il contesto. Cosa vuoi fare con gli elementi? Restituirai il nuovo array? Ti interessa l'originale e il nuovo array dopo doStuff()
?
Ad ogni modo, non c'è una risposta chiara qui, e decidere come rendere leggibile il codice dipende molto dal contesto.