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:
<?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 il 23/10/2008.

Le ultime guide della categoria PHP:

comments powered by Disqus