titolo in italiano:
Ordinamento di un array-multidimensionale in PHP
Oggi ho avuto la necessità di ordinare un array multidimensionale in PHP; un array di array in questo formato:
1 2 3 4 5 6 7 8 9 | //an array of some songs I like $songs = array( '1' => array('artist'=>'The Smashing Pumpkins', 'songname'=>'Soma'), '2' => array('artist'=>'The Decemberists', 'songname'=>'The Island'), '3' => array('artist'=>'Fleetwood Mac', 'songname' =>'Second-hand News') ); |
Sempre per il principio di non re-inventare la ruota, googlando un pò è saltata fuori questa funzione su firsttube:
Tuttavia a me serviva qualcosa di un pò più evoluto, che mi consentisse non solo di scegliere la chiave dell’array sulla quale ordinare, ma anche il verso dell’ordinamento.
1 2 3 4 5 6 7 8 9 10 11 12 13 | function subval_sort($a,$subkey) { foreach($a as $k=>$v) { $b[$k] = strtolower($v[$subkey]); } asort($b); foreach($b as $key=>$val) { $c[] = $a[$key]; } return $c; } |
Di seguito la mia estensione:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function subval_sort($a,$subkey,$sortOrder) { foreach($a as $k=>$v) { $b[$k] = strtolower($v[$subkey]); } if($sortOrder == "asc") asort($b); else if($sortOrder == "desc") arsort($b); foreach($b as $key=>$val) { $c[] = $a[$key]; } return $c; } |