W3docs

reset()

La funzione reset() in PHP riporta il puntatore interno di un array al primo elemento e ne restituisce il valore.

Ogni array PHP mantiene un puntatore interno nascosto che indica l'elemento "corrente". Funzioni come current(), key(), next() e prev() leggono e spostano questo puntatore. Dopo aver percorso un array, il puntatore rimane alla fine (o da qualche parte nel mezzo) e la successiva lettura restituisce l'elemento sbagliato. La funzione reset() riporta quel puntatore al primo elemento, consentendo di ricominciare dall'inizio.

Questo articolo spiega come funziona il puntatore interno, cosa restituisce reset(), dove può causare problemi comuni e come si integra con le altre funzioni per la gestione del puntatore degli array.

Cos'è reset()?

reset() è una funzione built-in di PHP che sposta il puntatore interno di un array al primo elemento e ne restituisce il valore. È la controparte di end(), che sposta il puntatore all'ultimo elemento.

È importante notare che reset() modifica il puntatore dell'array — ecco perché la sua firma accetta l'array per riferimento (&$array). Si passa una variabile, non un letterale, e reset() modifica lo stato del puntatore di quella variabile direttamente.

Sintassi

reset(array &$array): mixed

Parametri

ParametroDescrizione
$arrayL'array il cui puntatore interno si desidera riportare all'inizio. Viene passato per riferimento, quindi deve essere una variabile (non è possibile passare un array letterale inline).

Valore restituito

reset() restituisce il valore del primo elemento dell'array, oppure false se l'array è vuoto.

Un'insidia sottile: poiché un array vuoto restituisce false, non è possibile distinguere in modo affidabile "array vuoto" da "il primo elemento è letteralmente false" controllando solo il valore restituito. Se si ha bisogno di fare questa distinzione, verificare l'array con empty() o count() prima.

Esempi

Vediamo come si comporta reset() con diversi tipi di array.

Esempio 1: Reimpostazione del puntatore di un array numerico

Esempio di reimpostazione del puntatore di un array numerico in PHP

php— editable, runs on the server

In questo esempio, abbiamo un array di colori. Chiamiamo la funzione reset() per riportare il puntatore all'inizio dell'array. Quindi chiamiamo current() per ottenere il primo elemento, che è 'red'.

Esempio 2: Reimpostazione del puntatore di un array associativo

Esempio di reimpostazione del puntatore di un array associativo in PHP

php— editable, runs on the server

In questo esempio, abbiamo un array associativo con i dettagli di una persona. Chiamiamo la funzione reset() per riportare il puntatore all'inizio dell'array. Quindi chiamiamo key() e current() per ottenere la coppia chiave-valore del primo elemento.

Esempio 3: Perché reset() è importante dopo l'iterazione

Questo è il motivo più comune nel mondo reale per chiamare reset(). Le funzioni che spostano il puntatore (next(), end(), un ciclo while manuale) lo lasciano fermo in posizione. Senza reset(), la successiva lettura riprende da dove ci si era fermati:

<?php

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

// Advance the pointer to the end
end($colors);          // pointer now at 'blue'
echo current($colors); // outputs 'blue'

echo "\n";

// Rewind it
reset($colors);
echo current($colors); // outputs 'red'

reset() restituisce anche il primo valore, quindi è possibile ottenerlo direttamente: $first = reset($colors); restituisce 'red'.

reset() vs. foreach

Un punto di confusione frequente: un ciclo foreach non utilizza il puntatore interno dell'array. PHP itera su una copia interna, quindi il puntatore rimane intatto e non è necessario chiamare reset() dopo un foreach:

<?php

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

foreach ($colors as $color) {
    // ... do something
}

// Pointer was never moved by foreach
echo current($colors); // outputs 'red'

È necessario usare reset() solo quando si (o una funzione chiamata) avanza il puntatore tramite le funzioni basate sul puntatore. Vedere foreach per capire come funziona realmente il ciclo.

Insidie comuni

  • Passare una variabile, non un letterale. Poiché l'argomento è per riferimento, reset(['a', 'b']) genera un errore nelle versioni moderne di PHP. Assegnare prima l'array a una variabile.
  • reset() modifica lo stato. Se un'altra parte del codice fa affidamento sulla posizione attuale del puntatore, chiamare reset() la cambierà silenziosamente. Passare una copia se è necessario preservare il puntatore originale.
  • false è ambiguo. Un valore restituito false può significare "array vuoto" o "il primo valore è false". Usare empty($array) come guardia quando necessario.

Funzioni correlate

FunzioneSposta il puntatore aRestituisce
reset()Primo elementoPrimo valore (o false)
end()Ultimo elementoUltimo valore (o false)
next()Elemento successivoValore successivo (o false)
prev()Elemento precedenteValore precedente (o false)
current()(nessuno spostamento)Valore corrente
key()(nessuno spostamento)Chiave corrente

Conclusione

reset() riporta il puntatore interno di un array al primo elemento e ne restituisce il valore. Utilizzarla ogni volta che un'operazione precedente (next(), end() o un ciclo manuale sul puntatore) ha lasciato il puntatore in una posizione diversa dall'inizio e si ha la necessità di ricominciare a leggere dall'inizio. Ricordare che foreach non tocca il puntatore, che l'argomento deve essere una variabile e che un valore restituito false è ambiguo per gli array vuoti.

Pratica

Pratica
Cosa fa la funzione reset() in PHP?
Cosa fa la funzione reset() in PHP?
Was this page helpful?