40 – 41 Funzioni built-in 2 array ed include
Il comando include, permette di richiamare un file php esterno e di includerne il suo codice all’interno del nostro file.
<?php include("utility.php") ?>
Ora creiamo il file utility.php con inserite le 2 funzioni di stampa array viste nell’articolo precedente e la variabile $nl per la riga vuota.
<?php $nl="<br />"; // creo la funzione stampa. Il parametro $array è di fantasia function stampa($array) { $nl="<br />"; foreach ($array as $elemento) echo $elemento.$nl; echo "-------------------".$nl; } // creo la funzione stampa per gli array associativi. function stampa_ass($pippo) { $nl="<br />"; foreach ($pippo as $chiave => $elemento) echo $elemento.$nl; echo "+++++++++++++++++++".$nl; } ?>
Questo codice verrà caricato ogni volta che il file utility.php verrà incluso.
Ora creiamo il seguente file:
<?php include("utility.php") ?> <?php $vettore1=array(15,16,17,18,19,20,21); $vettore2=range(15, 21); $cliente1=array("Rossi", "Mario", 45, "via Roma", 7, 17019, "Varazze"); $cliente2=array ("Cognome"=>"Rossi", "Nome"=> "Mario", "Eta"=>45, "Via"=>"via Roma", "Civico"=>7, "Cap"=>17019, "Citta"=>"Varazze"); $Nome="Sandro"; $Cognome="Verdi"; ?>
andando avanti con le funzioni sugli array:
- extract
estrai gli elementi di un array. Negli associativi, per ogni elemento estratto crea una corrispondente variabile con il nome della sua chiave.extract($cliente2); echo $Nome. " ". $Cognome.$nl;
eseguendo la stampa delle variabili generate mi accorgo che $Nome esisteva già e il suo valore è stato sovrascritto con quello estratto dall’array associativo $cliente2. Per fare in modo che una variabile non venga sovrascritta in caso di omonimia, esistono delle costanti predefinite da inserire nella funzione extract. Una di queste è EXTR_PREFIX_ALL che va ad aggiungere un prefisso davanti al nome delle variabili create dall’estrazione delle chiavi dell’array assocativo. Il prefisso si indica dopo una virgola racchiuso
extract($cliente2, EXTR_PREFIX_ALL , "cli2");
Tra il prefisso ed il nome, viene aggiunto un underscore _:
extract($cliente2, EXTR_PREFIX_ALL , "cli2"); echo $Nome. " ". $cli2_Nome. " ". $cli2_Cognome.$nl;
- compact
È la complementare di extract, crea un array partendo da delle variabili.$cliente3=compact("Cognome", "Nome"); echo $cliente3['Cognome']. " ". $cliente3['Nome']. $nl;
- array_walk
crea un ciclo estraendo i dati da un array, indicato come primo argomento e li passa ad una funzione inserita come secondo argomento:<table> <tr> <?php array_walk($cliente1, "cellaTabella"); ?></tr> </table>
l’array $cliente1 l’avevamo creato in partenza:
$cliente1=array("Rossi", "Mario", 45, "via Roma", 7, 17019, "Varazze");
i dati che array_walk estrae $cliente1 li passa alla funzione cellaTabella che andremo a creare:
function cellaTabella($valoreCella) { echo "<td style='border: 1px solid red;'> $valoreCella </td>\n"; }
In questo modo con un semplice comando verrà creata una riga <td> contenente tutti i valori <td> con i dati estratti dall’array $cliente1
- in_array
controlla se un valore è presente in un array. Il primo argomento è il valore da cercare (Mario), il secondo è l’array dove cercarlo $cliente1:if (in_array("Mario", $cliente1) ) echo "Trovato!".$nl;
- sort
ordina un array:$vettore1=array(15,16,17,2,18,19,7,20,21); $vettore2=range(15, 21); echo "Array non ordinato".$nl; stampa($vettore1)
Prima effettuo la stampa disordinata, poi quella ordinata:
sort($vettore1); echo "Array ordinato".$nl; stampa($vettore1);
Esiste anche la funzione rsort (revert sort) che inverte l’ordinamento
rsort($vettore1); echo "Array ordinato".$nl; stampa($vettore1);
- asort
Riordina gli array associativi (associative sort):arsort($cliente2); echo "Array associativo ordinato".$nl; stampa_ass($cliente2);
L’ordinamento viene fatto in base all’ordine alfabetico dei valori.
- ksort
Effettua l’ordinamento in base all’ordine alfabetico delle chiavi dell’array associativo:krsort($cliente2); echo "Array associativo ordinato".$nl; stampa_ass($cliente2);
- usort, uasort, uksort
Si effettuano degli ordinamenti in base a dei controlli che posso definire (magari con delle funzioni che specificano cosa è maggiore e cosa è minore) e poi useremo usort (user define sort) per gli array, uasort per quelli associativi, uksort per gli associativi in base alla chiave. - array_sum
fa la somma dei valori di un array:$totale=array_sum($vettore1); echo "Totale: " . $totale.$nl;
- array_merge
unisce 2 array:$v3=array_merge($vettore1, $vettore2); stampa($v3);