Corsi on-line

PHP: aggiungere un valore ad un array specificando la chiave

Come è noto, in PHP (così come in altri linguaggi) gli array sono delle variabili che possono presentare più valori; di default il parser associa ad ogni valore una chiave (o “numero indice”) che va da “0” ad “n“, motivo per il quale il primo valore avrà “0” come chiave, il secondo “1” e così via.

phpQuesto meccanismo automatico, che si differenzia da quello degli array associativi dove al posto dei numeri i valori sono associati a dei nomi, può essere esemplificato tramite tale script:

<?php
$simpson = array("Homer", "Marge", "Bart", "Lisa", "Maggie");
foreach ($simpson as $key => $value) {
print($key." = ".$value.".<br />");
}
?>

Che produrrà un output come questo:

0 = Homer.
1 = Marge.
2 = Bart.
3 = Lisa.
4 = Maggie.

Ora, per aggiungere un nuovo elemento all’array potremmo procedere utilizzando il costrutto array[] = valore, per cui dovremmo utilizzare uno script come il seguente:

<?php
$simpson = array("Homer", "Marge", "Bart", "Lisa", "Maggie");
$simpson[] = 'Abe';
foreach ($simpson as $key => $value) {
print($key." = ".$value.".<br />");
}
?>

e ottenere l’output:

0 = Homer.
1 = Marge.
2 = Bart.
3 = Lisa.
4 = Maggie.
5 = Abe.

In questo caso il nuovo elemento viene posizionato automaticamente in coda all’array. Ma come dovremmo procedere se volessimo associare una chiave specifica al nuovo valore? Proviamo a definire l’indice al momento dell’inserimento:

<?php
....
$simpson[4] = 'Abe';
....
?>

Il nostro output sarà però:

0 = Homer.
1 = Marge.
2 = Bart.
3 = Lisa.
4 = Abe.

Quindi il nuovo valore è stato associato correttamente alla chiave desiderata, ma per far questo è andato perso il valore (“Maggie”) precedentemente abbinato alla stessa chiave. Come aggiungere un valore ad un array specificando la chiave e, nel contempo, riposizionando gli altri elementi che lo compongono? Una soluzione potrebbe trovarsi nella seguente funzione:

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;
}

che, applicata in questo modo al nostro array:

$simpson = inserimento_con_posizione($simpson, 4, "Abraham");

consentirà di ottenere un risultato come il seguente:

0 = Homer.
1 = Marge.
2 = Bart.
3 = Lisa.
4 = Abraham.
5 = Maggie.

Sostanzialmente array_slice() “taglierà” l’array all’altezza della posizione desiderata, quest’ultimo verrà poi ricomposto tramite array_merge().

Post correlati
I più letti del mese
Tematiche