php4people … 13% refresh

12 Aprile 2008

[fp11] array()

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:

  1. la creazione di un array vuoto:

    $variabile = array();

  2. la creazione di un array inserendo “manualmente” x informazioni:

    $variabile = array([istruzione],…);

  3. 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.

occhio!SOMMARIO DELLE DOMANDE E RISPOSTE SUGLI ARRAY
Se 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 2: Quante informazioni posso assegnare ad un indice ?
Domanda 3: Come faccio a sapere quanti indici sono stati inseriti all’interno di un array ?
Domanda 4: Come faccio a sapere se un’informazione è già presente in un array ?
Domanda 5: Come faccio ad estrarre le informazioni contenute in un array ?
Domanda 6: Come posso ordinare (ad esempio in ordine alfabetico) le informazioni di un array ?
Domanda 7: Come faccio a popolare un array senza dover inserire manualmente le informazioni ?
Domanda 8: Come faccio a cancellare le informazioni contenute 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”;
?>
output del numero di informazioni presenti in un array

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>!”;
?>
output funzione in_array
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];
}

?>
ciclo for su array

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];
}
?>
utilizzo di rsort per ordinare un array

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);
?>
array push e output

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);
?>
abstract-array-output

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 »

 

Blog su WordPress.com.