array() è una funzione o un costrutto del linguaggio PHP ? array() è un costrutto atipico. Atipico perché non è possibile omettere le parentesi in cui inserire le istruzioni. Fin qui sembrerebbe avere tutte le caratteristiche di una funzione, ma le similitudini terminano con le parentesi: la dichiarazione di un array prevede l’eventuale inserimento di una o più informazioni che l’array è chiamato a custodire. Perché si possa agire su queste informazioni occorre utilizzare delle funzioni standard create apposta per interagire con il contenuto di questo costrutto… atipico anche perché in fase di dichiarazione un array è chiamato ad eseguire un solo comando e per di più interno: l’archiviazione di una o più informazioni.
Ci sono tre tipi di dichiarazioni iniziali di un array:
- la creazione di un array vuoto:
$variabile = array();
- la creazione di un array inserendo “manualmente” x informazioni:
$variabile = array([istruzione],…);
- la creazione di un array “in automatico”, che porta comunque al risultato del punto 2.
Nota bene: un array deve essere sempre dichiarato in una variabile… sempre che se ne voglia fare un uso costruttivo
Ogni [istruzione] inserita in un array è definita da un indice (chiave) e dall’informazione vera e propria:
$array = array(1=>”a”,2=>”b”,3=>”c”);
$array è un array che contiene tre informazioni, ognuna delle quali è assegnata ad una chiave univoca (1,2,3). Da questo momento utilizzo $array per gli esempi seguenti. dichiarato sempre esempio per esempio, con tutte le modifiche che subirà in corso d’opera Gli esempi che propongo non sono altro che risposte alle domande a cui bisogna saper rispondere per iniziare ad usare questo costrutto con le funzioni standard create apposta dal PHP Group per lavorare su array().
Nota bene: è impensabile che riporti tutte le funzioni o le strutture di controllo capaci di agire su un array. Per questo c’è php.net (vedi il link precedente). In questo articolo riporto quelle funzioni fondamentali per iniziare a lavorare con gli array. In futuro potrei proporre altre funzioni standard, o strutture di controllo che “sono portate” meglio di altre a lavorare con array(). Questo articolo rimane aperto e suscettibile a future modifiche.
SOMMARIO DELLE DOMANDE E RISPOSTE SUGLI ARRAYSe non trovi risposte alle tue domande, lascia un commento e cercherò di darti le informazioni che cerchi. Domanda 1: Che tipo d’informazioni posso inserire in un array ? |
Domanda 1 – Che tipo d’informazioni posso inserire in un array ?
Stringe fuori variabili, variabili e altri array. Un array è un contenitore di dati e come ogni buon database può contenere tutte le informazioni previste dal linguaggio di programmazione in cui opera.
torna al Sommario delle Domande »
Domanda 2 – Quante informazioni posso assegnare ad un indice ?
Non c’è nessun limite. Supponendo di voler assegnare all’indice 0 – il primo indice di un array è sempre zero, per default - tre informazioni (nome, altezza, peso), questa è la sintassi da seguire:
$persona[0]['nome'] = “Paolo”;
$persona[0]['altezza'] = 177;
$persona[0]['peso'] = 80;$persona[1]['nome'] = “Francesca”;
$persona[1]['altezza'] = 170;
$persona[1]['peso'] = 60;
Questo array lo utilizzo in alcuni degli esempi seguenti.
torna al Sommario delle Domande »
Domanda 3 – Come faccio a sapere quanti indici sono stati inseriti all’interno di un array?
Utilizza la funzione count() :
<?php
// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” informazioni al suo interno”;
?>
Nota bene: la funzione count() conta il numero di indici presenti nell’array e non il numero effettivo d’informazioni assegnate ad ogni indice.
torna al Sommario delle Domande »
Domanda 4 – Come faccio a sapere se un’informazione è già presente in un array ?
Utilizza la funzione in_array() per array come $array:
<?php
// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” indici al suo interno”;// verifico se sono presenti in array due informazioni
if(!in_array(“z”,$array)) echo ” … l’array non contiene l’informazione <b>z</b>”;
if(in_array(“a”,$array)) echo ” ma contiene l’informazione <b>a</b>!”;
?>
Nota bene: la funzione in_array() non è in grado di trovare informazioni in array con più informazioni per indice.
E per verificare la presenza o meno di una informazione all’interno di array come quel $persona della Domanda 2 ? occorre creare una funzione custom (non standard) che chiami in esecuzione in_array() all’interno di un ciclo. Esiste una struttura di controllo ciclica che è l’ideale ma che introdurrò nel prossimo post. Pertanto per ora non propongo lo script d’esempio su array alla $persona. Modificherò queste righe una volta presentato il ciclo di cui parlo.
torna al Sommario delle Domande »
Domanda 5 – Come faccio ad estrarre le informazioni contenute in un array ?
Hai bisogno di una struttura di controllo ciclica come il ciclo for. Esistono cicli migliori del ciclo for per estrarre informazioni da un array uno di questi (già accennato in risposta alla domanda precedente) lo “presento” la prossima settimana, ma il ciclo for è in grado di fornire “prestazioni” accettabili.
Script d’esempio con l’array di lavoro $array:
<?php
// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” indici al suo interno”;// verifico se sono presenti in array due informazioni
if(!in_array(“z”,$array)) echo ” … l’array non contiene l’informazione <b>z</b>”;
if(in_array(“a”,$array)) echo ” ma contiene l’informazione <b>a</b>!”;// estraggo le informazioni dell’array con il ciclo for
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}
?>
Per lo Script d’esempio con l’array di lavoro $persona … stesso discorso della risposta alla Domanda precedente.
torna al Sommario delle Domande »
Domanda 6 - Come posso ordinare (ad esempio in ordine alfabetico) le informazioni di un array ?
Ci sono tre funzioni dedicate per questo:
- asort(); » ordina in modalità “ascendente” A-Z 0-x
- rsort(); » ordina in modalità “discendente” Z-A x-0
- ksort(); » ordina per indice ascendente: 0-x se numero, oppure A-Z se lettere
Dopo aver ordinato l’array come desideri ricordati di resettare il puntatore all’indice iniziale. Il puntatore “dice” al motore PHP da che indice inizare ad elaborare le informazioni di un array. La funzione dedicata è reset();
Lo script di esempio con array del tipo $array:
<?php
// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” indici al suo interno”;// verifico se sono presenti in array due informazioni
if(!in_array(“z”,$array)) echo ” … l’array non contiene l’informazione <b>z</b>”;
if(in_array(“a”,$array)) echo ” ma contiene l’informazione <b>a</b>!”;// estraggo le informazioni dell’array con il ciclo for
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}// ordino l’array in ordine alfabetico decrescente e resetto il puntatore
rsort($array);
reset($array);
echo “<p>—</p>Le informazioni sono state riordinate in ordine alfabetico decrescente”;// estraggo le informazioni nel nuovo ordine
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}
?>
Nota bene: Tutte queste funzioni lavorano l’array dall’interno. Questo vuol dire che non c’è bisogno di assegnare la chiamata della funzione ad una variabile.
Lo script mostrato è ridondante: al suo interno è chiamato in esecuzione lo stesso ciclo for per due volte. Negli script d’esempio seguenti le chiamate a questo ciclo aumentano, per questo motivo è logico “trasferire” il ciclo all’interno di una funzione creata ad hoc da chiamare in esecuzione quando necessario. Nello script d’esempio alla Domanda seguente dichiaro la funzione echoArray() e sostituisco le righe …
$tot = count($array);
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}
… con la chiamata in esecuzione della funzione:
echoArray($array);
Per lo Script d’esempio con l’array di lavoro $persona … stesso discorso della risposta alla Domanda 5.
torna al Sommario delle Domande »
Domanda 7 – Come faccio a popolare un array senza dover inserire manualmente le informazioni ?
Usa la funzione array_push() :
<?php
// dichiaro la funzione echoArray che manda in stampa il contenuto degli indici dell’array
function echoArray ($array) {
$tot = count($array);
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}
}// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” indici al suo interno”;// verifico se sono presenti in array due informazioni
if(!in_array(“z”,$array)) echo ” … l’array non contiene l’informazione <b>z</b>”;
if(in_array(“a”,$array)) echo ” ma contiene l’informazione <b>a</b>!”;// estraggo le informazioni dell’array
echoArray ($array);// ordino l’array in ordine alfabetico decrescente e resetto il puntatore
rsort($array);
reset($array);
echo “<p> — </p>Le informazioni sono state riordinate in ordine alfabetico decrescente”;// estraggo le informazioni nel nuovo ordine
echoArray($array);// esempio d’inserimento automatico d’informazioni nell’array: il ciclo for utilizzato serve per creare una stringa d’esempio.
for($x=1;$x<3;$x++){
$stringa = “stringa”.$x;
array_push($array,$stringa);
echo “<br />— la stringa <b>$stringa</b> è stata inserita in array”;
}
rsort($array);
reset($array);// estraggo le informazioni dell’array modificato, recupero il numero di indici presenti nell’array e mando in output
echo “<p>—</p>Nuovo elenco delle informazioni presenti in array:”;
echoArray ($array);
?>
Per lo Script d’esempio con l’array di lavoro $persona … stesso discorso della risposta alla Domanda 5.
torna al Sommario delle Domande »
Domanda 8 – Come faccio a cancellare le informazioni contenute in un array ?
Usa array_keys() per trovare l’indice contenitore dell’informazione e poi unset() per cancellare l’informazione :
Supponendo di voler cancellare l’informazione “stringa2″ contenuta nell’array $array …
<?php
// dichiaro la funzione echoArray che manda in stampa il contenuto degli indici dell’array
function echoArray ($array) {
$tot = count($array);
for($x=0;$x<$tot;$x++){
echo “<br /> <b>indice</b> “.$x.” – <b>informazione</b> “.$array[$x];
}
}// definisco l’array di lavoro
$array = array(0=>”a”,1=>”b”,2=>”c”);// recupero il numero d’informazioni presenti in array
$tot = count($array);
echo “l’array ha “.$tot.” indici al suo interno”;// verifico se sono presenti in array due informazioni
if(!in_array(“z”,$array)) echo ” … l’array non contiene l’informazione <b>z</b>”;
if(in_array(“a”,$array)) echo ” ma contiene l’informazione <b>a</b>!”;// estraggo le informazioni dell’array
echoArray ($array);// ordino l’array in ordine alfabetico decrescente e resetto il puntatore
rsort($array);
reset($array);
echo “<p> — </p>Le informazioni sono state riordinate in ordine alfabetico decrescente”;// estraggo le informazioni nel nuovo ordine
echoArray($array);// esempio d’inserimento automatico d’informazioni nell’array: il ciclo for utilizzato serve per creare una stringa d’esempio.
for($x=1;$x<3;$x++){
$stringa = “stringa”.$x;
array_push($array,$stringa);
echo “<br />— la stringa <b>$stringa</b> è stata inserita in array”;
}
rsort($array);
reset($array);// estraggo le informazioni dell’array modificato, recupero il numero di indici presenti nell’array e mando in output
echo “<p>—</p>Nuovo elenco delle informazioni presenti in array:”;
echoArray ($array);// elimino l’informazione “stringa2″
$indice = array_keys($array,”stringa2″);
unset($array[$indice[0]]); echo “<br /> -> l’indice “.$indice[0].” contenitore dell’informazione <b>stringa2</b> è stato cancellato dall’array”;// estraggo le informazioni dell’array modificato
echo “<p>—</p>Nuovo elenco delle informazioni presenti in array:”;
echoArray ($array,$tot);
?>
Nota bene: la funzione array_keys() restituisce i risultati in un array. L’array $indice a cui ho assegnato il risultato di array_keys() contiene una sola informazione all’indice zero. Ecco perché ho scritto l’istruzione unset($array[$indice[0]]); per “dire” alla funzione unset() di cancellare l’informazione contenuta nell’indice 0 dell’array $array.
Per lo Script d’esempio con l’array di lavoro $persona … stesso discorso della risposta alla Domanda 5.
torna al Sommario delle Domande »
SOMMARIO DELLE DOMANDE E RISPOSTE SUGLI ARRAY








[...] All’inizio di questo post ho scritto che str_replace() è in grado di lavorare su una variabile, quale che sia l’informazione che la definisce. Questo perché una variabile può anche non essere definita da una stringa. E’ il caso di variabili a cui sono assegnati insiemi d’informazioni: gli array. [...]
Pingback di [fp8] str_replace() « php4people … 12% refresh — 12 aprile 2008 @ 11:52
[...] array() » contenitore d’informazioni associate ad indici. [...]
Pingback di [fp4] Definizione di Costrutto in PHP « php4people … 12% refresh — 12 aprile 2008 @ 12:01
Grazie per il bel commento, dato che non posso scriverne altri tramite il circuito ti contatto da qui. I tuoi articoli mi sono utili dato che sto affrontando in questo periodo la programmazione, ed è buona soprattutto quando è open source, presto costruirò la pagina dei link se ti và, metto anche il tuo.
a presto e continua così
robbi
Commento di roberta — 12 aprile 2008 @ 15:47
Ciao Roberta. Per inviarti quel commento mi ci sono voluti tre tentativi! Superavo sempre il numero di caratteri permesso. Così ho deciso di fare un riassunto del riassunto
Non è venuto fuori un granché ma il senso l’hai capito se no non mi avresti scritto. E grazie te lo dico io, per il tuo commento.
Sono contento che ti sia utile qualcosa di quello che scrivo qui. Se posso darti una mano con alcuni argomenti che stai affrontando (tempo permettendo) ti dò la mia disponibilità. Al massimo ti giro un “non sono in grado” oppure un “mi richiede troppo tempo”.
Riguardo al link ti ringrazio. Se una volta creata la pagina vuoi ancora inserirmi hai il mio ok
Questo è un gesto che però non posso ricambiare su questo blog.
Commento di ferenir — 12 aprile 2008 @ 18:52
[...] sugli array() dicevo di una struttura di controllo ideale per lavorare le informazioni contenute in essi. Questa [...]
Pingback di [fp12] foreach « php4people … 12% refresh — 23 maggio 2008 @ 21:20