Categorie
PHP

PHP – Gli Array

A differenza di stringhe e numeri (che sono variabili scalari, nel senso che possono memorizzare un solo valore alla volta), un array può contenere più, pezzi separati di informazioni.
Un array è quindi come un elenco di valori, di cui ogni valore è una stringa, un numero o anche un altro array.
Gli array sono strutturati come una serie di coppie chiave-valore, dove ogni coppia è un elemento della matrice. Per ogni elemento della lista, c’è una chiave (o indice) ad esso associato.

PHP supporta due tipi di array: indicizzati, che utilizzano numeri come chiavi, ed associativi, che utilizzano le stringhe come chiavi.
Come nella maggior parte dei linguaggi di programmazione, con gli array indicizzati, la matrice avrà inizio con il primo indice a 0, a meno che non si specifichino le chiavi in modo esplicito.

Array Indicizzato
Chiave Valore
0 Marco
1 Matteo
2 Luca
3 Giovanni
Array Associativo
Chiave Valore
Pa Palermo
Mi Milano
To Torino
Fi Firenze

Un array segue le stesse regole di denominazione di qualsiasi altra variabile. Una variabile $var potrebbe essere un array, una stringa o un numero, non c’è nessuna differenza.
La differenza sta invece nell’accesso alla matrice.
Per fare riferimento a un valore specifico in un array, dobbiamo iniziare con il nome della variabile, seguito dalle parentesi quadre ([]) che conterranno la chiave del valore che vogliamo leggere:

echo $nomi[2];	// Luca
echo $prov['Fi'];	// Firenze

Attenzione a stampare un array, visto che usano una sintassi diversa dalle variabili normali la stampa può essere più difficoltosa. Se la matrice contiene una chiave stringa, questa potrebbe causare confusione nella sintassi di stampa, in questo caso dobbiamo racchiudere l’array tra parentesi graffe ({}), un esempio chiarisce il concetto:

echo "Ciao, mi chiamo $nome[3]";	// OK
echo "ed abito a $['Fi']";		// Errore
echo "ed abito a {$['Fi']}";		//OK

//oppure
echo "Ciao mi chiamo $nome[3] ed abito a " . $['Fi']	// OK

Creare un Array

Ci sono due modi principali per definire una matrice. In primo luogo, si potrebbe aggiungere un elemento alla volta, per costruirne uno:

$nomi[] = "Marco";
$nomi[] = "Matteo";
$nomi[] = "Luca";

Ora $nomi[0] vale Marco, $nomi[1] vale Matteo, $nomi[2] vale Luca.
In alternativa, è possibile specificare la chiave quando si aggiunge un elemento. Ma è importante capire che se si specifica una chiave esistente, il nuovo valore sovrascriverà quella esistente.

$nomi[3] = "Giovanni";
$prov['Mi'] = "Milano";

Invece di aggiungere un elemento alla volta possiamo costruire un array in un colpo solo attraverso la funzione array()

$prov = array('Pa' => 'Palermo', 'Mi' => 'Milano', 'To' => 'Torino');
//oppure
$nomi = array('Marco','Matteo','Luca','Giovanni');	//La chiave numerica parte da 0
// oppure
$nomi = array(1 => 'Marco','Matteo','Luca','Giovanni') //La chiave numerica parte da 1 e viene incrementata automaticamente
echo $nomi[4]	//Giovanni

La funziona array() può essere anche usata per inizializzare un array prima di assegnarvi i valori. In PHP non è richiesto inizializzare una matrice o una variabile, tuttavia a volte può servire per rendere il codice più chiaro ed evitare errori.

$giorni = array();
$giorni[] = "Lunedì";

Accesso agli Array

Abbiamo già visto come possiamo accedere ad un elemento per volta di un array, utilizzando le sue chiavi. Ma nel caso non conoscessimo le chiavi?
Per accedere ad ogni elemento della matrice il metodo giusto è utilizzare il ciclo foreach. Possiamo usare il ciclo for, ma questo non ci consentirà di ciclare tra gli elementi di un array di tipo associativo.
Con il seguente esempio iteriamo tra gli elementi di un array assegnando il loro valore alla variabile $valore:

foreach($mioArray as $valore){
  // fai qualcosa con $valore
}

Con quest’altro esempio invece otteniamo anche il valore della chiave assegnandolo alla variabile $chiave:

foreach($mioArray as $chiave => $value){
  echo "Il valore di $chiave è $valore.";
}

Array multidimensionali

Come detto all’inizio, i valori di un elemento di una matrice possono essere stringhe, numeri ma anche altri array. Quest’ultima opzione di matrice costituita da altre matrici crea un array multidimensionale.
Questo tipo di array sono molto più comuni di quanto si possa pensare, vediamo dunque come ci dobbiamo comportare.
Iniziamo creando un array multidimensionale:

$user = array(0 => array("nome" => "Mario", "cognome" => "Rossi"), 1 => array("nome" => "Marco", "cognome" => "Verdi"));
//oppure
$giorni = array(1,2,3,4,5,6,7,8... );
$mesi = array(1 => 'Gen', 'Feb','Mar','Apr'... );
$anno = array('giorni' => $giorni, 'mesi' => $mesi);

Ora $anno è un array multidimensionale con una chiave stringa. Per accedere al sub-array giorni usiamo echo $anno['giorni'], per accedere al mese ‘Mar‘ usiamo echo $anno['mesi'][3];.
Nell’esempio precedente avevamo anche creato un array ($user) in un unico passaggio. Lo possiamo usare tranquillamente ma secondo me (soprattutto nel caso di sub-array piuttosto grandi) il codice diviene piuttosto complicato da leggere oltre che brutto.

Vediamo ora come possiamo iterare su gli elementi di un array multidimensionale attraverso il foreach. Un esempio vale più di molte parole:

foreach($anno as $lista){
  foreach($lista as $k => $v){
    echo "$k = $v <br />";
  }
}

Ordinare un Array

PHP ci fornisce diversi funzioni che ci permettono di ordinare un array in modo molto semplice ed immediato.
Possiamo distinguere tra tre tipi di ordinamento. Innanzitutto, è possibile ordinare un array per valore, usando la funzione sort().
E ‘importante capire che le chiavi della matrice saranno resettate dopo il processo di ordinamento, quindi se il rapporto chiave-valore è importante, non si deve usare questa funzione.
In secondo luogo, è possibile ordinare un array in base al valore, pur mantenendo le chiavi, utilizzando asort(). In terzo luogo, è possibile ordinare un array per chiave, utilizzando ksort().
Possiamo anche invertire l’ordine se si utilizza rispettivamente: rsort(), arsort() e krsort(). Attraverso la funzione shuffle() possiamo randomizzare gli elementi di un array. Anche in questo caso le chiavi saranno resettate.
Infine la funzione PHP natsort() può essere utilizzata per ordinare le matrici in un ordine più naturale rispetto a sort() (essenzialmente trattando meglio i numeri in stringhe), un esempio rende meglio l’idea:

$images = array('image_4.jpg','image_12.jpg', 'image_21.jpg', 'image_1.jpg');
sort($images);
print_r($images);
natsort($images);
print_r($images);

/* Output
Array ( 
  [0] => image_1.jpg 
  [1] => image_12.jpg 
  [2] => image_21.jpg 
  [3] => image_4.jpg 
) 
Array ( 
  [0] => image_1.jpg 
  [3] => image_4.jpg 
  [1] => image_12.jpg 
  [2] => image_21.jpg 
)
*/

Funzioni utili

Oltre alla possibilità di ordinare gli array PHP ci offre molte altre funzioni utili per lavorare con questi, vediamone alcune delle più utilizzate iniziando da explode() ed implode() che ci permettono di passare da una stringa ad un array e viceversa:

$s = "Lune-Marte-Merco-Giove-Vene";
$aryGiorni = explode('-', $s);
// ora l'array aryGiorni avrà 5 elementi di cui il primo con indice 0 conterrà il valore "Lune", e così via.

$giorni = implode(", ",$aryGiorni);
// la var $giorni conterrà: "Lune, Marte, Merco, Giove, Vene"

La funzione range() ci permette di creare un array contenente un range di elementi, possiamo creare arrays numerici ed alfabetici per esempio:

//creo un elementi HTML select, con i giorni del mese da 1 a 31
$giorni = range(1, 31);
echo '';

//array contenete le lettere dll'alfabeto
$alfabeto = range('a','z');

Con la funzione is_array() possiamo controllare se una variabile è di tipo array, mentre con count() possiamo ottenere il numero di elementi di un array.
La funzione list() è un modo per assegnare gli elementi di un array (i valori) a diverse variabili in una sola operazione.
Alla prima variabile dell’elenco viene assegnato il valore dell’elemento corrispondente alla posizione 0, alla seconda la posizione 1 e così via.

$userInfo = array('Mario','Rossi','Via Roma, 12');
list($nome,$cognome,$indirizzo) = $userInfo;
echo "$nome $cognome abita in $indirizzo";
//output: Mario Rossi abita in Via Roma, 12

Questa è solo una parte delle funzioni che PHP ci offre per lavorare con gli array, un elenco completo lo potete trovare a questo indirizzo: it.php.net/manual/en/ref.array.php

Tips

Gli array multidimensionali possono anche provenire da un modulo HTML. Ad esempio, se un modulo ha una serie di checkbox con lo stesso nome, tipo:

Linguaggi conosciuti

HTML <br /> CSS <br /> JavaScript


 

La variabile $ _POST nella pagina PHP ricevente sarà multidimensionale. $ _POST['linguaggio'] sarà un array, con $ _POST['linguaggio'][0] contenente il valore della prima casella di controllo (html), $ _POST['linguaggio'][1] che contiene il secondo (css), e così via.
Da notare che sole le checkbox ceccate saranno passate alla pagina PHP.

 

foreach($_POST['linguaggio'] as $v){
  echo "$v <br />";
}

Lo stesso discorso vale per un elemento select che consente scelte multiple. 😉

8 risposte su “PHP – Gli Array”

Ciao, articolo ben fatto innanzitutto. Mi sto imbattendo in un problema simile.
Volendo che l’array invece che indicizzato fosse associativo, come sarebbe possibile gestirlo ?

Ciao Valerio, cosa intendi per “gestirlo”? nell’articolo e spiegato. Comunque

//Crazione
$ar = array();
$ar[‘foo’] = ‘Pippo’;
$ar[‘baz’] = ‘Bar’;

//eliminazione elemento
unset($ar[‘foo’]);

//Accesso
echo $ar[‘foo’]; //pippo

//Ciclo
//solo valori
foreach($ar as $value){
echo “$value
“;
}

//valori e chiavi
foreach($ar as $key => $value){
echo “$key = $value
“;
}

Solitamente gli array associativi vengono scorsi tramite la primitiva foreach

$associativo = array(‘keyA’ => ‘primo valore’, ‘keyB’ => ‘secondo valore’);
foreach($associativo as $key => $valore) echo “key[$key] val[$valore]\n”;

//output
key[keyA] val[primo valore]
key[keyB] val[secondo valore]

Se non si è interessati al valore della chiave allora basta ometterla dalla foreach:

foreach($associativo as $valore) echo “val[$valore]\n”;

//output
val[primo valore]
val[secondo valore]

ciao Ragazzi,
sempre parlando di array:
ho prelevato questi valori da una tabella attraverso una query e inseriti in un array :
key [ 1 ] => [ 1581166981 ]
key [ 2 ] => [ 1581166991 ]
key [ 3 ] => [ 1581167386 ]
key [ 4 ] => [ 1581168027 ] etc. etc.
quello che vorrei trovare sono le differenze tra tra un valore unix e l’altro,
forse si possono trovare le differenze già dalla query ma non ci sono riuscito,
allora sto provando lavorando con un array…
consigli ?

foreach($key as $val){
…if(isset($old))
……echo ($val – $old).”\n”;
…$old = $val;
}

i puntini sono solo per l’indentazione, non sono codice.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.