Ordinare un array multidimensionale e più array in PHP
Tutte le funzioni che abbiamo visto nel post precedente servono ad ordinare un array monodimensionale. Per ordinare un array multidimensionale o più array contemporaneamente si può utilizzare la funzione array_multisort.
Questa funzione restituisce TRUE o FALSE in base al successo o meno dell'ordinamento e mantiene le chiavi se non sono numeriche. Accetta un numero flessibile di parametri. Il primo parametro deve essere un array e quelli seguenti possono essere array o metodi di ordinamento (SORT_ASC per ordinare in ordine crescente, SORT_DESC per l'ordine decrescente e i metodi che abbiamo già visto SORT_REGULAR, SORT_NUMERIC e SORT_STRING).
Nel primo esempio vediamo come ordinare più array contemporaneamente:
Il primo array quindi sarà ordinato in questo modo 2, 2, 3, 4 e 5 e il secondo in questo modo 'b', 'c', 'a', 'd' e 'e'. Praticamente viene effettuato l'ordinamento del primo array e quando ci sono degli elementi uguali (nell'esempio il 2) si effettua l'ordinamento in base all'elemento con lo stesso indice del secondo array.
Per ordinare un array multidimensionale il ragionamento è il medesimo. Ecco un esempio:
Il risultato sarà come quello dell'esempio precedente, cioè il primo sotto-array sarà uguale al primo array dell'esempio precedente e il secondo sotto-array sarà uguale al secondo dell'esempio precedente.
Quindi si può dedurre che la funzione array_multisort è molto simile all'ORDER BY di SQL.
Ecco una query di esempio:
È uguale a questo script in PHP:
L'array $utenti sarà ordinato prima in modo decrescente in base ai cognomi e poi, per i cognomi uguali, in modo crescente in base ai nomi.
Questa funzione restituisce TRUE o FALSE in base al successo o meno dell'ordinamento e mantiene le chiavi se non sono numeriche. Accetta un numero flessibile di parametri. Il primo parametro deve essere un array e quelli seguenti possono essere array o metodi di ordinamento (SORT_ASC per ordinare in ordine crescente, SORT_DESC per l'ordine decrescente e i metodi che abbiamo già visto SORT_REGULAR, SORT_NUMERIC e SORT_STRING).
Nel primo esempio vediamo come ordinare più array contemporaneamente:
<?php $arr1 = array(3,2,2,4,5); $arr2 = array('a','b','c','d','e'); array_multisort($arr1,$arr2); ?>
Il primo array quindi sarà ordinato in questo modo 2, 2, 3, 4 e 5 e il secondo in questo modo 'b', 'c', 'a', 'd' e 'e'. Praticamente viene effettuato l'ordinamento del primo array e quando ci sono degli elementi uguali (nell'esempio il 2) si effettua l'ordinamento in base all'elemento con lo stesso indice del secondo array.
Per ordinare un array multidimensionale il ragionamento è il medesimo. Ecco un esempio:
<?php $arr = array( array(3,2,2,4,5), array('a','b','c','d','e') ); array_multisort($arr[0],$arr[1]); ?>
Il risultato sarà come quello dell'esempio precedente, cioè il primo sotto-array sarà uguale al primo array dell'esempio precedente e il secondo sotto-array sarà uguale al secondo dell'esempio precedente.
Quindi si può dedurre che la funzione array_multisort è molto simile all'ORDER BY di SQL.
Ecco una query di esempio:
SELECT nome,cognome FROM utenti ORDER BY cognome DESC,nome ASC
È uguale a questo script in PHP:
<?php $utenti = array( array('nome'=>'Pippo','cognome'=>'Baudo'), array('nome'=>'Mickey','cognome'=>'Mouse'), array('nome'=>'Paolino','cognome'=>'Paperino') ); $cognomi = array(); $nomi = array(); foreach($utenti as $k=>$v){ $cognomi[$k] = $v['cognome']; $nomi[$k] = $v['nome']; } array_multisort($cognomi,SORT_DESC,SORT_STRING, $nomi,SORT_DESC,SORT_STRING, $utenti); ?>
L'array $utenti sarà ordinato prima in modo decrescente in base ai cognomi e poi, per i cognomi uguali, in modo crescente in base ai nomi.
Questa guida è stata pubblicata su Ciarpame {.com}.
Guida scritta da Mattia il 23/10/2008.