Aggiungere un elemento ad una array con PHP è cosa piuttosto semplice. Vediamo un esempio: per prima cosa creiamo una array:
$miaarray = array('pippo','pluto');
ora supponiamo di voler aggiungere un nuovo elemento; per farlo sarà sufficiente scrivere:
$miaarray[] = 'topolino';
oppure, in alternativa, è possibile utilizzare la funzione array_push in questo modo:
array_push($miaarray, 'topolino');
se volete aggiungere più di un elemento:
array_push($miaarray, 'topolino', 'paperino', 'minnie');
Per verificare l’effetto del nostro intervento:
print_r($miaarray);
che produrrrà il seguente output:
Array
(
[0] => pippo
[1] => pluto
[2] => topolino
[3] => paperino
[4] => minnie
)
Come avrete notato di default il parser PHP associa, ad ogni valore dell’array, una chiave (o "numero indice") che va da 0 ad N.
Aggiungendo un nuovo elemento questo viene posizionato automaticamente in coda all’array e gli viene assegnato un indice in modo automatico (in modo incrementale rispetto agli indici già presenti).
Ma come procedere se volessimo associare una chiave specifica al nuovo valore?
Aggiungere un elemento specificando la chiave
Partiamo da quest’ultima array di 5 elementi e supponiamo di volerne inserire un sesto con chiave esplicita 3:
$miaarray[3] = 'zio paperone';
Stampando a video il contenuto dell’array otterremo questo risultato:
Array
(
[0] => pippo
[1] => pluto
[2] => topolino
[3] => zio paperone
[4] => minnie
)
Quindi il nuovo valore è stato associato correttamente alla chiave desiderata, ma per far questo è andato perso il valore precedentemente abbinato alla stessa chiave ("paperino").
Aggiungere un elemento specificando la chiave senza sovrascrivere nulla?
Come aggiungere un valore ad un array specificando la chiave e, nel contempo, riposizionando gli altri elementi che lo compongono? Una soluzione potrebbe trovarsi nel seguente script:
function inserimento_con_posizione($array, $posizione, $valore)
{
$nuovo_array = array_merge(array_slice($array, 0 , $posizione), array($valore), array_slice($array, $posizione));
return $nuovo_array;
}
La nostra funzione personalizzata dovrà essere usata in questo modo:
$miaarray = inserimento_con_posizione($miaarray, 3, 'zio paperone');
consentirà di ottenere un risultato come il seguente:
Array
(
[0] => pippo
[1] => pluto
[2] => topolino
[3] => zio paperone
[4] => paperino
[5] => minnie
)
Sostanzialmente array_slice()
"taglierà" l’array all’altezza della posizione desiderata, quest’ultimo verrà poi ricomposto tramite array_merge()
.. Ne consegue che gli elementi dell’array scivoleranno di una posizione per lasciar spazio a quello nuovo (e nulla verrà rimosso).