PHP : Classer simplement ses tableaux bidimensionnels

Pour continuer la série des Astuces PHP, n’étant pas du tout satisfait de la fonction array_multisort() (que je trouve trop complexe d’utillisation et qui renvoi parfois des résultats obscurs !), je vous propose une solution alternative qui vous permettra de classer un tableau bidimensionnel selon une de ses colonnes.

Si comme moi vous utilisez souvent des tableaux bidimensionnels pour traiter le résultat de vos requêtes SQL, cette fonction pourra sûrement vous être utile !

function sortByKey($array, $index, $order = 'ASC')
{
     $sort = array();
     foreach ($array as $key => $val)
     {
          $sort[$key] = $val[$index];
     }
     natcasesort($sort);
     $output = array();
     foreach($sort as $key => $val)
     {
          $output[] = $array[$key];
     }
     if($order == 'DESC')
     {
          $output = array_reverse($output);
     }
     return $output;
}

La fonction est simple à utiliser : elle prends comme argument le tableau à classer et la colonne selon laquelle le classement sera fait. Un argument optionnel spécifie le sens du classement.

Rien ne vaut mieux qu’un bel exemple :

$a_classer = array(
	0 => array('name' => 'Jean', 'date' => '2008-04-01', 'gender' => 'M'),
	1 => array('name' => 'Paul', 'date' => '2008-06-08', 'gender' => 'M'),
	2 => array('name' => 'Joseph', 'date' => '2005-11-23', 'gender' => 'M'),
	3 => array('name' => 'Albert', 'date' => '2007-09-13', 'gender' => 'M'),
	3 => array('name' => 'Sonia', 'date' => '2007-12-30', 'gender' => 'S')
);
 
// On classe par prénom
print_r(sortByKey($a_classer, 'name' , 'ASC'));
//On classe par date d'inscription
print_r(sortByKey($a_classer, 'date' , 'DESC'));

Voila, plus de prises de tête avec array_multisort() ou de nouvelles requêtes inutiles !

Brindavoine

Partager et découvrir : Ces icones representent les sites de bookmarking social dans lesquels vos lecteurs peuvent partager et faire découvrir vos pages.
  • Bluegger
  • Fuzz
  • Tapemoi
  • Scoopeo
  • Pioche
  • Blogasty
  • Zataz
  • MisterWong Fr
  • Facebook
  • BlogMemes Fr
  • Digg
  • Reddit
  • Technorati
  • del.icio.us
  • Furl
  • YahooMyWeb
  • Yoolink
  • Digg France
  • Wikio
  • DiggFR.com
  • Le Ouizz
  • StumbleUpon

Billets similaires

Tags: PHP //

Laissez un commentaire