Un array associativo è un array composto da più array; spesso quando ci si trova a lavorare con questa tipologia di informazioni si ha a che fare con una moltitudine di valori e di indici che non è semplice consultare e manipolare.
In questo breve tutorial vedremo come sia possibile ordinare alfabeticamente un array associativo sulla base di un indice; per far questo partiamo con un semplice esempio di array associativo che a sua volta contiene altri tre normali array:
# definizione di un array associativo $array = array( array( "device" => "stampante", "marca" => "Abc Inc.", "prezzo" => "€120,00" ), array( "device" => "scanner", "marca" => "123 Inc.", "prezzo" => "€80,00" ), array( "device" => "monitor", "marca" => "Xyz Inc.", "prezzo" => "€160,00" ) );Se volessimo stampare il contenuto del nostro array associativo otterremmo il seguente output:
Array
(
[0] => Array
(
[device] => stampante
[marca] => Abc Inc.
[prezzo] => €120,00
)
[1] => Array
(
[device] => scanner
[marca] => 123 Inc.
[prezzo] => €80,00
)
[2] => Array
(
[device] => monitor
[marca] => Xyz Inc.
[prezzo] => €160,00
)
)
In questo caso è facile notare come l'array venga presentato esattamente come è stato definito; ma se per esempio volessimo ordinare i tre array interni sulla base di un determinato indice, quale procedura dovremmo seguire?
La risposta è abbastanza semplice; presenteremo di seguito un esempio di script in grado di ordinare alfabeticamente l'array associativo presentato sulla base dei valori relativi all'indice "device":
<?php
# definiamo l'array associativo
$array = array (
array(
"device" => "stampante",
"marca" => "Abc Inc.",
"prezzo" => "€120,00"
),
array(
"device" => "scanner",
"marca" => "123 Inc.",
"prezzo" => "€80,00"
),
array(
"device" => "monitor",
"marca" => "Xyz Inc.",
"prezzo" => "€160,00"
)
);
# inizializziamo un ciclo for che abbia come condizione di terminazione
# il numero degli array interni meno "1"
for ($i=0;$i<count($array)-1;$i++)
{
# inizializziamo un ciclo for che abbia come condizione di terminazione
# il numero degli array
for ($j=$i+1;$j<count($array);$j++)
{
# utilizziamo come indici i valori derivanti dall'iterazione dei cicli e utilizziamoli
# per effettuare un controllo tra valori
$ordina = strcmp($array[$i]["device"], $array[$j]["device"]);
# ordiniamo i valori sulla base dei confronti ponendo per primi
# i valori alfabeticamente "maggiori"
if ($ordina > 0)
{
$ordinato = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $ordinato;
}
}
}
# stampiamo i valori dell'array ordinato alfabeticamente
echo "<pre>\n";
print_r($array);
echo "</pre>\n";
?>
Alla base del nostro script vi è la funzione strcmp() che consente il confronto affidabile tra due stringhe sulla base dei dati binari; la sintassi di questa funzione è
int strcmp ( string $str1 , string $str2 )che restituisce "< 0" se $str1 è minore di $str2 ; "> 0" se $str1 è maggiore di $str2 o "0" se le due stringe sono uguali.
L'output del nostro script sarà il seguente:
Array
(
[0] => Array
(
[device] => monitor
[marca] => Xyz Inc.
[prezzo] => €160,00
)
[1] => Array
(
[device] => scanner
[marca] => 123 Inc.
[prezzo] => €80,00
)
[2] => Array
(
[device] => stampante
[marca] => Abc Inc.
[prezzo] => €120,00
)
)
Otteremo cioè un nuovo array associativo riordinato sulla base dell'indice "device" e della posizione alfabetica dei relativi valori.
| Corso Linux Guida completa al sistema open-source. A partire da 39 €. | |
| Corso MySQL Gestione del database open-source. A partire da 49 €. | |
| Corso PHP Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 15/02/2012. |