W3docs

La funzione end() per gli array in PHP

Scopri la funzione end() di PHP: sintassi, utilizzo pratico, gestione del puntatore interno e insidie comuni come array vuoti e associativi.

In PHP, gli array sono uno dei tipi di dati più utilizzati. Un array può contenere una raccolta di dati in una singola variabile, che può essere manipolata e iterata facilmente. Una delle funzioni disponibili per manipolare gli array è la funzione end().

Nella sua forma più semplice, la funzione end() restituisce l'ultimo valore di un array. Internamente sposta anche il puntatore interno dell'array sull'ultimo elemento, un dettaglio che la maggior parte delle persone tende a trascurare. In questo articolo tratteremo la sintassi della funzione end(), il suo funzionamento pratico, il modo in cui interagisce con il puntatore interno e le insidie più comuni — array vuoti e array associativi — che possono creare problemi.

Sintassi

La sintassi della funzione end() è semplice:

end(array &$array): mixed

Dove $array è l'array di cui si vuole restituire l'ultimo elemento. Vale la pena notare due aspetti:

  • L'array viene passato per riferimento (&$array) perché end() modifica il puntatore interno dell'array. Di conseguenza è necessario passare una variabile reale, non un'espressione inline come end([1, 2, 3]) — questo genera un avviso nelle versioni precedenti di PHP e un errore fatale in PHP 8.1+.
  • Il tipo di ritorno è mixed: restituisce il valore dell'ultimo elemento, oppure false se l'array è vuoto.

Utilizzo

Vediamo più da vicino come funziona la funzione end() in pratica. Consideriamo il seguente array:

Un array PHP

$fruits = array('apple', 'banana', 'cherry');

Per recuperare l'ultimo elemento di questo array usando end(), utilizzeremmo il seguente codice:

php— editable, runs on the server

Dopo l'esecuzione di questo codice, $last_fruit conterrà la string 'cherry'.

Modifica del puntatore dell'array

Ogni array PHP mantiene un puntatore interno che tiene traccia di una posizione "corrente". Chiamare end() sposta quel puntatore sull'ultimo elemento. Le altre funzioni del puntatore lo spostano anch'esse: reset() torna al primo elemento, next() avanza di un passo, prev() torna indietro di uno e current() legge l'elemento su cui si trova il puntatore senza spostarlo.

Poiché end() lascia il puntatore sull'ultimo elemento, chiamare current() subito dopo restituisce lo stesso ultimo valore:

<?php

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

end($fruits);
echo current($fruits);

Questo codice produrrà il seguente output:

cherry

Se si desidera iterare su un array in ordine inverso, non tentare di farlo chiamando end() ripetutamente — il puntatore non si sposta mai oltre l'ultimo elemento, quindi un ciclo guidato da end() non terminerebbe mai. Usa invece array_reverse() (o un ciclo for standard con indice che conta a ritroso da count($array) - 1):

<?php

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

foreach (array_reverse($fruits) as $fruit) {
    echo $fruit . "<br>";
}

Questo codice produrrà il seguente output:

cherry
banana
apple

Insidie comuni

Ci sono alcune insidie comuni di cui essere consapevoli quando si utilizza la funzione end():

Array vuoti

Se l'array passato a end() è vuoto, la funzione restituisce false. Questo è ambiguo: false è anche un valore legittimo che un array non vuoto potrebbe contenere, quindi un controllo diretto può dare una risposta errata.

php— editable, runs on the server

Per sicurezza, verifica prima se l'array è vuoto (con empty() o count()), oppure usa il confronto rigoroso !== false:

php— editable, runs on the server

Array associativi

La funzione end() restituisce sempre il valore dell'ultimo elemento, indipendentemente dal fatto che l'array sia indicizzato o associativo:

php— editable, runs on the server

Se hai bisogno di recuperare l'ultima chiave di un array associativo, usa invece la funzione array_key_last():

php— editable, runs on the server

end() vs array_pop()

Un punto di confusione comune è la differenza tra end() e array_pop(). Entrambe restituiscono l'ultimo elemento, ma:

  • end() legge l'ultimo valore e lascia l'array invariato (sposta solo il puntatore interno).
  • array_pop() rimuove l'ultimo elemento e lo restituisce, riducendo l'array di uno.

Usa end() quando vuoi semplicemente dare uno sguardo all'ultimo valore; usa array_pop() quando vuoi effettivamente rimuoverlo dall'array.

Funzioni correlate

La funzione end() fa parte della famiglia delle funzioni per il puntatore interno di PHP. Questi capitoli coprono le rimanenti:

  • reset() — sposta il puntatore al primo elemento e lo restituisce.
  • current() — legge l'elemento nella posizione corrente del puntatore.
  • next() — avanza il puntatore e restituisce l'elemento successivo.
  • prev() — arretra il puntatore e restituisce l'elemento precedente.
  • array_reverse() — ottiene una copia invertita dell'array per un'iterazione inversa pulita.
  • array_pop() — rimuove e restituisce l'ultimo elemento.

Conclusione

In questo articolo abbiamo esaminato in dettaglio la funzione end() in PHP, incluse la sua sintassi, il suo utilizzo e le insidie più comuni. Sebbene possa sembrare una funzione semplice, ci sono alcune sfumature importanti di cui essere consapevoli quando la si utilizza. Comprendendo come funziona end(), è possibile evitare errori comuni e sfruttare questa funzione al massimo del suo potenziale nel proprio codice PHP.

Diagramma

Ecco un diagramma per illustrare l'utilizzo della funzione end():

graph TD
A[Array] --> B(end())
B --> C{Check result}
C --> |True| D(Return last element)
C --> |False| E(Handle empty array)

Esercitazione

Pratica
Qual è lo scopo della funzione end() in PHP?
Qual è lo scopo della funzione end() in PHP?
Was this page helpful?