PHP/Programmazione/Array

Wikibooks, manuali e libri di testo liberi.
CopertinaPHP/Copertina


Gli array (o vettori) sono delle strutture dati complesse che risultano molto comode per la codifica di particolari algoritmi.

Possiamo pensare agli array come a delle liste di elementi nelle quali ciascun elemento ha un valore e un indice (o chiave) numerico o alfanumerico che lo identifica nella lista.

Gli array possono essere numerici o associativi: nel primo caso ciascun elemento della lista è identificato unicamente da un indice numerico; nel secondo caso ogni valore ha un indice numerico e uno alfanumerico, che può quindi memorizzare altri dati particolari.
In PHP non esistono matrici multidimensionali ma queste possono essere emulate creando strutture (anche molto complesse) con array di array, dal momento che ciascun elemento di un array può a sua volta essere un array:

$valore = array();
$riga = 2;
$colonna = 3;
$nome = 'Pippo';
 
$valore[$riga][$colonna][$nome] = 10;

Per inizializzare una variabile come array occorre dichiarare la variabile come tale e si utilizza la seguente notazione:

$array = array();

Per fare riferimento ad un elemento dell'array si usa la sintassi

$array[indice]

dove indice è un numero oppure, come spiegato sopra, una chiave alfanumerica.
Per aggiungere all'array un elemento con un indice n è sufficiente fare riferimento all'elemento stesso, come nell'esempio seguente:

$array = array();
$array[n] = "prova";

Per inserire automaticamente un elemento alla fine della lista si usa invece la sintassi

$array[] = valore;

L'indice assegnato così all'elemento appena inserito è pari all'elemento maggiore incrementato di uno. Se l'array è vuoto, viene assegnato indice 0.

$array = array();
$array[] = "prova1";
$array[] = "prova2";
$array[] = "prova3";
 
echo $array[0];
echo $array[1];
echo $array[2];

Questo semplice spezzone di codice restituirà

prova1prova2prova3

Se vogliamo indicare la posizione in cui inserirlo, oppure la chiave a cui dovrà essere associato, dovremo inserire il valore usando la sintassi seguente:

$array = array();
$array[1] = "prova 1";
$array["prova"] = "prova 2";

Ovviamente se un elemento è già presente a tale indice o chiave questo verrà sovrascritto.

È possibile assegnare dei valori all'array già in fase di dichiarazione, passandoli come parametri alla funzione array() che si occupa appunto di creare un nuovo array.

$array = array( "prova1", "prova2", "prova3" );
echo $array[0];
echo $array[1];
echo $array[2];

Questo spezzone di codice restituirà

prova1prova2prova3

proprio come nell'esempio fatto sopra.

Funzioni utili[modifica]

print_r[modifica]

print_r è una funzione molto utile in php, non solo per gli array, ma anche per molti altri tipi di oggetto. Nel caso degli array, comunque, è funzionale perché consente di stampare il contenuto degli stessi in modo molto utile per eseguire, ad esempio, un veloce debug.

Ad esempio

$array = array( 100, 200, 300 );
print_r( $array );

restituirà il seguente output:

array(
   [0] => 100,
   [1] => 200,
   [2] => 300
 )

count[modifica]

La funzione count, come suggerisce il nome, restituisce il numero di elementi contenuti nell'array.

$array = array( 1, 2, 3, 4 );
echo count( $array );

avrà come output

4

implode ed explode[modifica]

Queste due funzioni lavorano con le stringhe e gli array. La sintassi è:

implode (collante, array)
explode (delimitatore, stringa)

La prima restituisce una stringa ottenuta concatenando in ordine tutti gli elementi di array inframezzandoli dalla stringa collante.
La seconda restituisce un array ottenuto separando stringa utilizzando delimitatore come separatore.
Ad esempio:

$arr = array('a','b','c');
$stringa = implode(":", $arr); //restituisce a:b:c


foreach[modifica]

vedi anche qui

Questa non è proprio una funzione, ma una struttura di controllo. Funziona così:

$arr = array('a','b','c');
foreach($arr as $variabile_chiave => $variabile_contenuto)
{
 // istruzioni
}

Esempio:

$arr = array('a','b','c');
foreach($arr as $valore)
{
 echo $valore;
}

oppure, se si vuole visualizzare anche la chiave dell'array si fà così:

$arr = array('a'=>'lettera 1','b'=>'lettera 2','c'=>'lettera 3');
foreach($arr as $key=>$valore)
{
 echo "La chiave dell'array ".$key." è uguale a ".$valore.".<br>";
}

Il primo esempio restituirà abc, il secondo
La chiave dell'array a è uguale a lettera 1.
La chiave dell'array b è uguale a lettera 2.
La chiave dell'array c è uguale a lettera 3.

Si può utilizzare anche per fare qualcosa di più che un semplice echo, per esempio possiamo cambiare il valore di un elemento nel caso sia uguale a...:

$arr = array('a','b','c');
print_r($arr);
foreach($arr as $i => $valore)
{
 if ( $arr[$i] == 'b' )
  $arr[$i]='mario';
}
echo "<br>";
print_r($arr);

l'output sarà

Array ( [0] => a [1] => b [2] => c )
Array ( [0] => a [1] => mario [2] => c )

unset()[modifica]

Unset distrugge la variabile ma non libera immediatamente la memoria!! La memoria verrà liberata quando ci sarà qualche ciclo di cpu non utilizzato oppure quando il programma finirà la memoria.
Nel caso degli array, unset($mioarray); distruggerà l'array, con foreach invece distruggeremo i valori all'interno dell'array ma non l'array stesso. Infatti se:

<?php                            
$arr=array('mario','ciccio','fuffi');
print_r($arr);
unset($arr);
echo "<br /> unset array arr, arr e'  ancora un array?<br />";
echo is_array($arr) ?  "si arr e' un array" : "no arr non e' un array";
 
echo "<br><br>";
 
 
$mioarr=array('ena','dva','tri');
foreach($mioarr as $i => $value)
   unset($mioarr[$i]);
echo "cancellati i valori dell'array mioarr con foreach, e' ancora un array? <br />";
echo is_array($mioarr) ?  "si mioarr e' un array" : "no mioarr non e' un array array";
?>

l'output sarà:
Array ( [0] => mario [1] => ciccio [2] => fuffi ) 
unset array arr, arr e' ancora un array?
no arr non è un array


cancellati i valori dell'array mioarr con foreach, e' ancora un array? 
si mioarr è un array
Attenzione!
Se utilizziamo foreach per cancellare gli elementi dell'array, non reindicizzeremo l'array, quindi:

$mioarr=array('uno','due','tre');
print_r($mioarr);
 
foreach($mioarr as $i => $value)
	unset($mioarray[$i];
 
print_r($mioarr);
 
mioarr[]='ciccio';
print_r($mioarr);

restituirà:
Array ( [0]=>uno [1]=>due [2]=>tre )
Array()
Array ( [3]=>ciccio )
l'array non viene reindicizzato come quando usiamo unset($mioarray); la stessa cosa se cancelliamo solo un elemento:

unset($mioarr[1]);

ecco che l'array sarà adesso:

print_r($mioarr);

Array ( [0]=>uno [2]=>tre )
per reindicizzarlo dovremo usare:

$mioarr=array_values($mioarr);

array_values restituisce tutti i valori contenuti nell'array e indicizza numericamente l'array destinatario.
L'array ora conterrà:
Array ( [0]=>uno [1]=>tre )


Altre funzioni[modifica]

Per vedere tutte le funzioni riguardanti gli array, guardare nella sezione Array functions della Documentazione ufficiale