Link sponsorizzati

Ordinare alfabeticamente array associativi con PHP

Articolo scritto da Claudio Garau

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.
Nel nostro caso il confronto sarà alfabetico, quindi verranno considerate "maggiori" le stringhe alfabeticamente precedenti e "minori" quelle successive.

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.

Nella stessa categoria...
E-Learning
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 15/02/2012.
Link sponsorizzati