W3docs

Capire la Funzione array_shift di PHP

La funzione array_shift in PHP rimuove il primo elemento da un array e ne restituisce il valore. Scopri sintassi, re-indicizzazione ed esempi pratici.

La funzione array_shift in PHP rimuove il primo elemento da un array e ne restituisce il valore. Poiché opera sempre sull'inizio dell'array, è lo strumento naturale per consumare una lista dall'inizio — elaborare una coda, rimuovere una riga di intestazione o eliminare un elemento iniziale indesiderato.

Due caratteristiche distinguono array_shift dal semplice annullamento di $array[0]:

  • Modifica l'array originale in-place (passato per riferimento) — non si costruisce un nuovo array.
  • Re-indicizza le chiavi numeriche, quindi gli elementi rimanenti ricominceranno sempre da 0. Le chiavi string vengono lasciate invariate.

Questa pagina tratta la sintassi, il valore restituito, il comportamento di re-indicizzazione, un'insidia comune nei cicli e diversi esempi eseguibili.

Sintassi

array_shift(array &$array): mixed
ParteSignificato
&$arrayL'array da cui effettuare lo shift. Passato per riferimento, quindi viene modificato direttamente.
valore restituitoIl valore del primo elemento rimosso, oppure null se l'array è vuoto.

Poiché l'array viene passato per riferimento, si chiama array_shift($colors) su una variabile — non su un letterale o sul risultato di una funzione.

Rimozione del primo elemento

L'utilizzo più comune è eliminare il primo elemento. La funzione modifica l'array direttamente:

php— editable, runs on the server

Il risultato sarà:

Array
(
    [0] => green
    [1] => blue
)

Acquisizione del valore rimosso

array_shift restituisce l'elemento rimosso, quindi è possibile conservarlo riducendo l'array in un'unica istruzione:

php— editable, runs on the server

Il risultato sarà:

red
Array
(
    [0] => green
    [1] => blue
)

Le chiavi vengono re-indicizzate

Questo è il comportamento che sorprende di più. array_shift non si limita a rimuovere $array[0] — rinumera ogni chiave intera rimanente a partire da 0. Le chiavi string mantengono i loro nomi.

<?php

$data = [5 => "a", 10 => "b", "x" => "c"];

array_shift($data); // removes "a"

print_r($data);

?>

Il risultato sarà:

Array
(
    [0] => b
    [x] => c
)

Si noti che 10 => "b" è diventato 0 => "b", mentre "x" => "c" è rimasto invariato. Se è necessario preservare le chiavi numeriche originali, usa invece array_slice.

Elaborazione di un array come coda

Un pattern comune consiste nel svuotare un array dall'inizio, elaborando un elemento alla volta. L'idioma standard usa array_shift all'interno di un ciclo while:

php— editable, runs on the server

Il risultato sarà:

Running: build
Running: test
Running: deploy

Il ciclo si ferma perché array_shift restituisce null quando l'array è vuoto.

Insidia: non usare un test di valore truthy nel ciclo

Spesso si incontra questa forma più breve:

while ($value = array_shift($queue)) { ... }

Funziona con string come "build", ma è una trappola. La condizione è vera solo finché il valore è truthy, quindi il ciclo si interrompe prematuramente al primo 0, "", "0", false, o null:

<?php

$numbers = array(3, 0, 1);

while ($n = array_shift($numbers)) {
    echo "$n\n";
}

print_r($numbers); // 1 was never processed

?>

Il risultato sarà:

3
Array
(
    [0] => 1
)

Il ciclo si è interrotto a 0, lasciando 1 non elaborato. Confronta sempre esplicitamente con null (!== null) quando i valori potrebbero essere falsy.

Rimozione di più elementi iniziali

Chiamando array_shift più volte si rimuovono gli elementi dall'inizio. Qui eliminiamo i primi tre:

php— editable, runs on the server

Il risultato sarà:

Array
(
    [0] => yellow
    [1] => orange
)

Per rimuovere un gruppo iniziale di elementi in una sola chiamata anziché in un ciclo, usa array_splice($colors, 0, 3).

Funzioni correlate

array_shift è una delle quattro funzioni per aggiungere e rimuovere elementi alle estremità di un array:

FunzioneAgisce suCosa fa
array_shiftInizioRimuove e restituisce il primo elemento
array_unshiftInizioAggiunge uno o più elementi all'inizio
array_popFineRimuove e restituisce l'ultimo elemento
array_pushFineAggiunge uno o più elementi alla fine

Per estrarre una porzione senza modificare l'array originale, vedi array_slice; per rimuovere o sostituire un intervallo, vedi array_splice.

Conclusione

array_shift rimuove il primo elemento di un array, ne restituisce il valore, modifica l'array in-place e re-indicizza le chiavi intere rimanenti a partire da 0. È ideale per consumare un array come coda e per eliminare elementi iniziali indesiderati — ricorda solo il comportamento di re-indicizzazione e l'insidia del ciclo con valori falsy descritti sopra.

Esercizio

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