En PHP, il n’existe pas de fonction permettant de trier un tableau par colonne tel que :
$arr = array(); $arr[0]['key1'] = '100'; $arr[1]['key1'] = '300'; $arr[2]['key1'] = '10'; $arr[3]['key1'] = '1000'; // $arr[0]['key2'] = 'd'; $arr[1]['key2'] = 'b'; $arr[2]['key2'] = 'a'; $arr[3]['key2'] = 'c';
Grâce à la fonction usort utilisant un callback, on peut intervenir dans le tri que l’on souhaite. La fonction suivante permet de trier le tableau ci-dessus par la clé ‘key2′ :
function sortby(&$data, $sortby) { static $sort_arr = array(); if (empty($sort_arr[$sortby])) { $code = "\$c=0;"; foreach (split(',', $sortby) as $key) { $array = array_pop($data); array_push($data, $array); if(is_numeric($array[$key])) $code .= "if ( \$c = ((\$a['$key'] == \$b['$key']) ? 0:((\$a['$key'] < \$b['$key']) ? -1 : 1 )) ) return \$c;"; else $code .= "if ( (\$c = strcasecmp(\$a['$key'],\$b['$key'])) != 0 ) return \$c;\n"; } $code .= 'return $c;'; $sort_arr = $sort_arr[$sortby] = create_function('$a, $b', $code); } else { $sort_arr = $sort_arr[$sortby]; } $sort_func = $sort_arr[$sortby]; uasort($data, $sort_arr); }
On obtiendra alors :
Array ( [2] => Array ( [key1] => 10 [key2] => a ) [1] => Array ( [key1] => 300 [key2] => b ) [3] => Array ( [key1] => 1000 [key2] => c ) [0] => Array ( [key1] => 100 [key2] => d ) )






