next()
Scopri come PHP next() avanza il puntatore interno di un array, cosa restituisce, la trappola dei valori falsy e come si usa con reset() e prev().
La funzione PHP next()
Ogni array PHP possiede un puntatore interno che indica un elemento come quello "corrente". La funzione next() sposta quel puntatore in avanti di una posizione e restituisce il valore su cui si ferma. Fa parte di una piccola famiglia di funzioni per i puntatori — reset(), current(), prev() e end() — che permettono di scorrere un array passo dopo passo senza scrivere un proprio contatore di indici. Questa guida spiega esattamente cosa restituisce next(), come modifica il puntatore e i casi limite che creano problemi.
Sintassi e valore restituito
next(array &$array): mixedDa quella firma derivano tre dettagli importanti:
- L'array viene passato per riferimento (
&$array).next()non restituisce un nuovo array — modifica il puntatore interno dell'array passato. - Restituisce il valore dell'elemento successivo, non di quello corrente. Per leggere l'elemento sotto il puntatore senza spostarlo, usa
current(). - Alla fine dell'array restituisce
falsee parcheggia il puntatore oltre l'ultimo elemento. Ogni chiamata successiva restituisce anch'essafalse.
Quando uno script accede per la prima volta a un array, il puntatore si trova sul primo elemento. Quindi la prima chiamata a next() restituisce già il secondo elemento — una frequente fonte di errori di off-by-one.
Un esempio base di next()
Il frammento seguente legge il primo elemento con current(), poi avanza di due posizioni. L'ultima chiamata supera la fine e restituisce false:
L'output è:
apple
banana
cherry
bool(false)Scorrere un array con next()
Un pattern comune è chiamare prima reset() (per essere sicuri che il puntatore sia all'inizio), stampare il primo elemento, poi ciclare con next() finché non restituisce false:
Questo stampa:
red
green
blueNota il confronto stretto !== false — la sezione successiva spiega perché un controllo generico è pericoloso.
La trappola dei valori falsy
next() restituisce false alla fine dell'array, ma restituisce false anche quando il valore reale di un elemento è false, 0, "" o null. Una condizione generica come while (next($array)) si interrompe quindi non appena incontra uno di quei valori:
Poiché next() restituisce 0 per il secondo elemento, il corpo del ciclo non viene mai eseguito — l'output è semplicemente:
donePer gli array che possono contenere valori falsy, è preferibile usare foreach (che ignora completamente il puntatore interno) oppure controllare key(), che restituisce null solo alla vera fine dell'array.
Come next() si relaziona alle altre funzioni per i puntatori
next() raramente lavora da sola. Si abbina a reset(), current(), prev(), end() e key() per offrirti il controllo manuale completo sul cursore di un array:
| Funzione | Sposta il puntatore? | Restituisce |
|---|---|---|
current() | No | Elemento sotto il puntatore |
next() | Avanti di uno | Nuovo elemento corrente (o false alla fine) |
prev() | Indietro di uno | Nuovo elemento corrente (o false prima dell'inizio) |
reset() | Al primo | Primo elemento |
end() | All'ultimo | Ultimo elemento |
key() | No | Chiave dell'elemento corrente (o null oltre la fine) |
L'esempio seguente usa end() e prev() insieme a next() per mostrare come il puntatore possa muoversi in entrambe le direzioni durante un singolo passaggio:
Output:
30
20
30
10Quando usare next()
Per la semplice iterazione su ogni elemento, un ciclo foreach è più chiaro e sicuro — non incappa mai nei valori falsy. Ricorri a next() solo quando hai davvero bisogno di un controllo esplicito, passo dopo passo, sulla posizione del puntatore, ad esempio per guardare avanti mentre sei ancora a metà ciclo.
Conclusione
La funzione next() avanza il puntatore interno di un array di un passo in avanti e restituisce il valore su cui si ferma, restituendo false una volta superato l'ultimo elemento. Poiché dipende dal puntatore interno e segnala la fine con false, lavora in stretta collaborazione con reset(), current() e prev() — ricorda solo la trappola dei valori falsy, in cui una condizione di ciclo generica si interrompe troppo presto. Per l'iterazione quotidiana preferisci foreach; scegli next() quando hai bisogno di un controllo preciso sul cursore dell'array.