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