Sis srl

Ciarpame {.com}

Useful stuffs for the masses. Useless things for few.

October 24th, 2008

Ordinare un array multidimensionale e più array in PHP

by Mattia Palugan

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:

$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:

$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:

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

Tags: · ,
Categories: Programming

1 Comment

  • 1 May 18, 2009 at 16:36
    Alberto

    Ti ringrazio, mi sei stato molto utile, ho finalmente capito come utilizzare il comando array_multisort.

Leave a Comment