W3docs

next()

Scopri come next() di PHP avanza il puntatore interno di un array, restituisce l'elemento successivo o false alla fine, e si abbina a reset(), current() e prev().

Introduzione

Ogni array PHP mantiene un puntatore interno che contrassegna un elemento come "corrente". Una piccola famiglia di funzioni sposta quel puntatore senza dover scrivere un ciclo: reset(), current(), prev(), end() e next(). Questo articolo si concentra su next() — cosa restituisce, come modifica il puntatore e i casi limite che possono trarre in inganno.

Cosa fa la funzione next()

next() avanza il puntatore interno dell'array di una posizione e restituisce il valore dell'elemento su cui si trova. La firma è:

next(array &$array): mixed

Da questa firma discendono alcune considerazioni:

  • L'array viene passato per riferimento (&$array). next() non restituisce un nuovo array — muta il puntatore dell'array passato.
  • Restituisce il valore dell'elemento successivo, non quello corrente. Se vuoi l'elemento sotto il puntatore senza spostarlo, usa current().
  • Al termine dell'array restituisce false e lascia il puntatore fermo oltre l'ultimo elemento. Chiamare di nuovo next() continua a restituire false.

Quando uno script inizia, il puntatore si trova sul primo elemento, quindi la primissima chiamata a next() restituisce già il secondo elemento, non il primo. Questa è la fonte più comune di confusione "off-by-one" con next().

Esempio base

<?php

$fruits = ['apple', 'banana', 'cherry'];

echo current($fruits) . "\n"; // pointer starts on the first element
echo next($fruits) . "\n";    // move forward, return the second
echo next($fruits) . "\n";    // move forward, return the third
var_dump(next($fruits));      // past the end -> false

Questo produce:

apple
banana
cherry
bool(false)

current() legge il primo elemento senza spostare il puntatore, poi ogni next() avanza di un elemento. L'ultima chiamata supera la fine dell'array e restituisce false.

Scorrere un array con next()

Un pattern comune è partire con reset() (per essere sicuri che il puntatore sia all'inizio) e ciclare con next() finché non restituisce false:

<?php

$colors = ['red', 'green', 'blue'];

reset($colors);
echo current($colors) . "\n"; // first element

while (($color = next($colors)) !== false) {
    echo $color . "\n";
}

Output:

red
green
blue

Nota il !== false (confronto rigoroso). Questo è importante — vedi la sezione successiva.

Il problema dei "valori falsy"

next() restituisce false alla fine dell'array, ma restituisce false anche se il valore effettivo di un elemento è false, 0, "" o null. Un controllo non rigoroso come while (next($array)) si interromperà prematuramente non appena incontra uno di questi valori:

<?php

$data = ['a', 0, 'b'];
reset($data);

// WRONG: stops at the 0, never reaches 'b'
while ($value = next($data)) {
    echo $value . "\n";
}
echo "---\n";

Questo stampa solo:

---

Il ciclo termina immediatamente perché next() restituisce 0 (il secondo elemento), che è falsy. Per gli array che possono contenere valori falsy, è preferibile usare foreach, che bypassa completamente il puntatore interno, oppure usare key() per rilevare la vera fine:

<?php

$data = ['a', 0, 'b'];
reset($data);

do {
    echo current($data) . "\n";
} while (next($data) !== null && key($data) !== null);

In pratica, un semplice foreach è lo strumento giusto per iterare su ogni elemento; ricorri a next() solo quando hai davvero bisogno di un controllo manuale e passo dopo passo del puntatore.

next() e le funzioni correlate per il puntatore

FunzioneSposta il puntatore?Restituisce
current()NoElemento sotto il puntatore
next()In avanti di unoNuovo elemento corrente (o false alla fine)
prev()Indietro di unoNuovo elemento corrente (o false prima dell'inizio)
reset()Al primoPrimo elemento
end()All'ultimoUltimo elemento
key()NoChiave dell'elemento corrente (o null oltre la fine)

Combinare next() e prev() consente di guardare avanti e tornare indietro durante una singola passata su un array.

Conclusione

La funzione next() avanza il puntatore interno di un array di un passo e restituisce il valore su cui si trova, oppure false una volta raggiunta la fine. Poiché si basa sul puntatore interno e segnala la fine con false, si abbina naturalmente a reset(), current() e prev() — ma attenzione agli array contenenti valori falsy, dove una condizione di ciclo non rigorosa si interromperà troppo presto. Per un'iterazione semplice, preferisci foreach; usa next() quando hai bisogno di un controllo esplicito sulla posizione del puntatore.

Esercitazione

Pratica
Cosa fa la funzione 'next()' di PHP secondo le informazioni fornite sulla pagina?
Cosa fa la funzione 'next()' di PHP secondo le informazioni fornite sulla pagina?
Was this page helpful?