Corsi on-line

Ordinare un array multidimensionale in PHP

Oggi vi propongo un’interessante funzione PHP per l’ordinamento di un array multidimensionale (cioè un array che contiene altre array). La funzione in questione si chiama array_msort() e consente di effettuare degli ordinamenti SQL Like, ovvero come se si stesse eseguendo una query sul database con la clausola ORDER BY.
La funzione in questione, infatti, consente di ordinare i valori dell array specificando il campo da considerare e l’ordinamento desiderato (ad esempio ascendente o discendente). Da notare che è possibile specificare anche più di un campo per l’ordinamento (esattamente come facciamo con ORDER BY) in modo da avere più criteri per un ordinamento estremamente preciso. Ecco la funzione:

<?php
//function 
function array_msort($array, $cols) { 
    $colarr = array(); 
    foreach ($cols as $col => $order) { 
        $colarr[$col] = array(); 
        foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); } 
    } 
    $eval = 'array_multisort('; 
    foreach ($cols as $col => $order) { 
        $eval .= '$colarr[\''.$col.'\'],'.$order.','; 
    } 
    $eval = substr($eval,0,-1).');'; 
    eval($eval); 
    $ret = array(); 
    foreach ($colarr as $col => $arr) { 
        foreach ($arr as $k => $v) { 
            $k = substr($k,1); 
            if (!isset($ret[$k])) $ret[$k] = $array[$k]; 
            $ret[$k][$col] = $array[$k][$col]; 
        } 
    } 
    return $ret; 
} 
?>

Di seguito un codice pronto all’uso per testare la funzione array_msort():

<?php 
$utenti = array( 
    array('id'=>1, 'nome'=>'Mario', 'cognome'=>'Rossi'), 
    array('id'=>2, 'nome'=>'Paolo', 'cognome'=>'Bianchi'), 
    array('id'=>3, 'nome'=>'Luca', 'cognome'=>'Neri'), 
    array('id'=>4, 'nome'=>'Clauidia', 'cognome'=>'Bianchi'), 
); 
$utenti = array_msort($utenti, array('cognome'=>SORT_ASC, 'nome'=>SORT_ASC)); 
?>
Post correlati
I più letti del mese
Tematiche