umanbomb

Trier un tableau par colonne en PHP

Posté par Swifty_core le 26 mars 2008 Comments (0)

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
        )
 
)
themeforest