array_push($arr, $value) aggiunge un valore in fondo a un array. Per un solo valore, la forma breve $arr[] = $value; fa lo stesso lavoro senza chiamare una funzione ed è quella che usa la maggior parte del codice PHP. Entrambe modificano l'array sul posto.
array_push() riceve l'array per riferimento, quindi modifica la variabile che le passi. Restituisce il nuovo numero di elementi, che puoi ignorare.
array_push vs $arr[] =
Usa $arr[] = $value per un solo valore: è più breve ed evita una chiamata di funzione, che dentro un grande ciclo pesa. Usa array_push() quando hai più valori da aggiungere in un'istruzione, o una lista di valori da espandere.
$arr[] = funziona anche su una variabile che non esiste ancora: PHP crea l'array. array_push() richiede un array esistente: su una variabile non definita lancia TypeError: array_push(): Argument #1 ($array) must be of type array, null given.
Aggiungere una chiave e un valore
array_push() accoda solo valori con la successiva chiave intera. Per aggiungere una chiave con nome, assegnale un valore. Per aggiungere più coppie insieme, usa += (mantiene le chiavi esistenti) o array_merge() (fa vincere i nuovi valori).
La differenza tra + e array_merge() quando le chiavi coincidono è trattata nella pagina su array_merge.
Aggiungere all'inizio: array_unshift
array_unshift($arr, $value) inserisce all'inizio. Le chiavi intere vengono rinumerate in modo che il nuovo valore abbia indice 0; le chiavi stringa restano invariate. Come array_push(), accetta più valori e restituisce il nuovo conteggio.
Per mettere per prima una coppia con nome, costruisci un nuovo array: $menu = ['login' => '/login'] + $menu;.
Inserire in una posizione precisa
array_splice($arr, $offset, 0, $values) inserisce senza rimuovere nulla: parte da $offset, rimuove 0 elementi e mette lì i nuovi valori. Le chiavi intere dopo il punto di inserimento vengono rinumerate.
array_splice() può anche rimuovere e sostituire elementi; la pagina sulla rimozione degli elementi mostra queste forme.
Accodare un altro array
array_push($a, $b) aggiunge $b come un unico elemento annidato, cosa che raramente vuoi. Per aggiungere i valori di $b uno per uno, espandili, oppure costruisci un nuovo array con la sintassi spread o con array_merge().
Errore comune: assegnare il valore restituito
array_push() restituisce un numero, il nuovo conteggio degli elementi. Riassegnarlo alla variabile dell'array sostituisce l'array con un intero, e il successivo array_push() su di essa lancia un TypeError.
Lo stesso vale per array_unshift() e per sort(), che restituisce true. Le funzioni che modificano un array sul posto restituiscono uno stato, non l'array.
Domande frequenti
Qual è la differenza tra array_push e $arr[] in PHP?
Entrambi accodano in fondo. $arr[] = $x; aggiunge un valore senza chiamare una funzione, quindi è la scelta abituale ed è un po' più veloce. array_push($arr, $a, $b, $c) è comodo quando aggiungi più valori insieme, e restituisce il nuovo numero di elementi.
Come aggiungo una chiave e un valore a un array in PHP?
Assegna alla chiave: $arr['color'] = 'blue';. array_push() non può farlo perché usa sempre la successiva chiave intera. Per aggiungere più coppie insieme, usa $arr += ['a' => 1, 'b' => 2]; oppure array_merge().
Come aggiungo un elemento all'inizio di un array in PHP?
Usa array_unshift($arr, $value). Rinumera le chiavi intere in modo che il nuovo valore abbia indice 0; le chiavi stringa restano invariate.
Perché il mio array diventa un numero dopo array_push?
Perché array_push() restituisce il nuovo numero di elementi, non l'array. Scrivere $arr = array_push($arr, 'x'); sostituisce l'array con quel numero. Chiamala su una riga a sé: array_push($arr, 'x');.