PHP: 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}.