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): mixedParametri
| Parametro | Descrizione |
|---|---|
$array | L'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
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
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, chiamarereset()la cambierà silenziosamente. Passare una copia se è necessario preservare il puntatore originale.falseè ambiguo. Un valore restituitofalsepuò significare "array vuoto" o "il primo valore èfalse". Usareempty($array)come guardia quando necessario.
Funzioni correlate
| Funzione | Sposta il puntatore a | Restituisce |
|---|---|---|
reset() | Primo elemento | Primo valore (o false) |
end() | Ultimo elemento | Ultimo valore (o false) |
next() | Elemento successivo | Valore successivo (o false) |
prev() | Elemento precedente | Valore 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.