Post Pic

Appunti PHP: manipolazione array

Con questo post riporto alcuni appunti relativi all’utilizzo del PHP. Come per gli appunti SEO, gli appunti PHP sono annotazioni e come tali lungi dall’essere esaustive. Spero possano essere utili anche a qualcun altro :) , buona lettura.
In PHP, con il termine array identifichiamo una struttura dove i dati sono mantenuti grazie ad una associazione chiave –> valore.
Semplificando, possiamo distinguere due tipi principaly di array:

  • Array numerici: utilizzano chiavi numeriche
  • Array associativi: usano stringhe come chiavi

Possiamo creare una array così:

$a = array(‘I’,'II’,'III’,'IV’,'V’);

Oppure così:

$a[] = 'I';
$a[] = 'II';
$a[] = 'III';
$a[] = 'IV';
$a[] = 'V';

In entrambi i modi le chiavi (numeriche) vengono create automaticamente: in questo caso da 0 a 4.
Quando utilizziamo array associative possiamo dichiararle in questo modo:

$a = array( 'primo'=>'I','secondo'=>'II','terzo'=>'III','quarto'=>'IV','quinto'=>'V');

oppure

$a['primo'] = 'I';
$a['secondo'] = 'II';
$a['terzo'] = 'III';
$a['quarto'] = 'IV';
$a['quinto'] = 'V';

Possiamo parlare invece di array nidificati quando un elemento di un array è a sua volta un array. In questo caso la costruzione non cambia molto:

$a = array(
'romani' =>array( 'primo'=>'I','secondo'=>'II','terzo'=>'III','quarto'=>'IV','quinto'=>'V'),
'arabi'=>array('primo'=>'1','secondo'=>'2','terzo'=>'3','quarto'=>'4','quinto'=>'5')
);

Qui di seguito alcuni esempi d’uso suddivisi per casistiche:

Leggere il contenuto di un array

In assoluto una delle attività replicate più spesso è la lettura del contenuto di un array. In particolare la lettura a fini di debug, la lettura “semplice” e quella “ricorsiva”.

Per leggere velocemente il contenuto di un array due sono i comandi utili: print_r e var_dump. Entrambe le funzioni si occupano di stampare a video il contenuto di un array, var_dump genera un output più “verboso” rispetto a print_r. Fate una prova:

$a = array(
'romani' =>array( 'primo'=>'I','secondo'=>'II','terzo'=>'III','quarto'=>'IV','quinto'=>'V'),
'arabi'=>array('primo'=>'1','secondo'=>'2','terzo'=>'3','quarto'=>'4','quinto'=>'5')
);
print_r($a);
echo "br";
var_dump($a);

Per elaborare in modo ricorsivo gli elementi di un array si può utilizzare foreach. Facciamo un esempio:

$idArr = array("Pluto","Topolino","Pippo","Paperoga");
$stringa ="
<ul>";
foreach ($idArr as $i)
$stringa .="
	<li>$i</li>
";
$stringa .="</ul>
";
echo $stringa;

Nel caso di un array annidato è necessario creare una funzione che chiama se stessa.

function leggoArray($arr) {
// controlla se l'input è effettivamente un array
if(!is_array($arr)) {die ("L'argomento passato non è un array");}
// scorre l'array
foreach ($arr as $value) {
// se è un array annidato scorre in modo ricorsivo
if(is_array($value)) {
leggoArray($value);
} else {
// stampa l'elemento
echo $value . "n";
}
}
}
// definiamo ora l'array annidato
$dati = array(
"Europa", array ("Francia", "Spagna"), array ("Italia", array("Liguria","Toscana"))
);
// richiamiamo la funzione
leggoArray($dati);

Conteggio degli elementi di un array

Per contare quanti elementi contiene un array si può utilizzare la funzione count(). In questo modo:

$paperopoli = array("pippo","plute","paperino","paperoga");
echo "Paperopoli ha " . count($paperopoli) . " elementi";

Composizione/scomposizione di un array

Tramite le funzioni implode() e explode() è possibile ottenere rispettivamente una stringa da un array e viceversa.

//definiamo la stringa
$alfabeto = "a b c d e f g h i l m n o p q r s t u v z";
$array_alfabeto = explode(" ",$alfabeto);
print_r($array_alfabeto);
//ora ricostituiamo una nuova stringa
$newAlfabeto = implode(", ",$array_alfabeto);
echo "<br/>" . $newAlfabeto;

Inserimento /eliminazione di elementi da un array

Con array_push() aggiungo un elemento alla fine dell’array:

array_push($paperopoli, "pinotto");
print_r($paperopoli);

Con array_shift() estraggo un elemento all’inizio dell’array:

array_shift($paperopoli);
print_r($paperopoli);

Con array_unshift aggiungo un elemento all’inizio dell’array:

array_unshift($paperopoli,"la banda bassotti");
print_r($paperopoli);

Con array_pop() estraggo un elemento alla fine dell’array:

array_pop($paperopoli);
print_r($paperopoli);

Con array_splice() si può rimuovere una porzione dell’array e sostituirla con altra:

$a= array("pippo","pluto","paperino","paperoga","gastone");
array_splice($input, 2);
// $input è ora array("pippo", "pluto")

Aggiungendo un argomento otteniamo anche la sostituzione degli elementi dell’array:

$a= array("pippo","pluto","paperino","paperoga","gastone");
array_splice($a, 2, 0, "minni");

Con array_slice() estraete un sottoinsieme da un array:

$paperopoli = array("pippo","pluto","paperino","paperoga","gastone");
$slice = array_slice($paperopoli,1,3);
print_r($slice);

Eliminare elementi duplicati da un array

Per eliminare i valori duplicati contenuti in un array si può utilizzare la funzione array_unique():

$numeri = array(10,20,10,15,16,17,18,19,19,19,1,1,1,1,4,98,97,99,98,0);
//estrae gli elementi unici e li mette in un nuovo array
$numeriunici = implode(", ",array_unique($numeri));
echo $numeriunici;

Reindicizzare un array

Quando si eliminano degli elementi da un array (ad esempio utilizzando unset()) rimangono dei “buchi” nelle chiavi numeriche. Utilizzando array_values() è possibile reindicizzare l’array:

$paperopoli = array("pippo","pluto","paperino","paperoga");
unset($paperopoli[2]);
print_r($paperopoli);
echo "<br/>";
$paperopoli = array_values($paperopoli);
print_r($paperopoli);

“Mescolare” un array in modo random

Utilizzando shuffle() è possibile reindicizzare in modo random il contenuto di un array

$numeri= array(1,2,3,4,5);
shuffle($numeri);
echo implode(", ",$numeri);

Cercare dentro un array

Rispettivamente con array_key_exists(“chiave”,Array) e in_array(“valore”,Array) possiamo controllare se una data chiave o un dato valore è presente nell’array:

$data = array(
"Euro" => "Italia",
"Dollaro" => "USA",
"Sterlina" => "Inghilterra");
echo array_key_exists("euro",$data) ? "La chiave è presente nell'array" : "La chiave non c'è";
echo "<br/>";
// ora controllo un valore
echo in_array("USA",$data) ? "Valore presente in array" : "valore assente dall'array";

Filtrare un array

A volte è necessario filtrare i valori di un array secondo un qualche criterio array_filter() sottopone ciascun elemento di un array ad una funzione e ne verifica il valore restituito

function positivo($value) {
return ($value > 0) ? true : false;
}
// definiamo un array di numeri
$numeri= array(-10.-2,-4,-10,5,20,45,-1);
print_r(array_filter($numeri, 'positivo'));

Uso delle array nei form

Le array risultano particolarmente utili quando abbiamo a che fare con valori multipli passati da un form:

// Si legge il contenuto di un array inviata via post
if (isset($_POST['invia'])) {
print_r($_POST['scelta']);
}

Qui di seguito un semplicissimo form che invia l’array “scelta” via post


<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post"> <input name="scelta[]" type="checkbox" value="Pippo" /> Pippo

<input name="scelta[]" type="checkbox" value="Pluto" /> Pluto

<input name="scelta[]" type="checkbox" value="Paperino" /> Paperino

<input name="invia" type="submit" value="invia" /> </form>

Lascia un commento

* Nome, Email e commento sono campi obbligatori


Archivio vecchi post