Vous allez me dire qu’il est facile de faire un tri sur un tableau associatif en utilisant une fonction simple comme sort, usortou bien array_ multisort et je suis entièrement en accord avec vous. Par contre, je cherchais une fonction pour trier plusieurs tableaux qui ont été regroupé sous le même tableau.

Voici un exemple un peu plus concret. Vous avez trois tables SQL, une de chiens, une de chats et une d’oiseaux. Vous voulez créer une page qui affiche les derniers animaux ajoutés sur votre site web trié par date d’ajout. Il serait surement possible de le faire en SQL mais j’ai décidé aujourd’hui de le faire en PHP.

J’ai fait des recherches sur les algorithmes de tri. J’en suis venu à la conclusion d’utiliser le Tri par Insertion. Je suis partie du code disponible sur Wikipédia pour en venir avec le code suivant :


function insert_sort($arr,$key,$desc=false){
    $count = count($arr);

	for($i=1; $i< $count; $i++){
        $tmp = $arr[$i];
        $j = $i - 1;
		$done = false;
		while(!$done){
            if($j >= 0){
				if($arr[$j][$key] > $tmp[$key]){
	            	$arr[$j+1] = $arr[$j];
		            $arr[$j] = $tmp;
		            $j--;
				}else{
					$done = true;
				}
			}else{
				$done = true;
			}
         }
     }
	if(!$desc){
		return $arr;
	}
	return array_reverse($arr);
}

Quelques petites explications. En argument on retrouve deux éléments obligatoire ainsi qu’un facultatif. Le premier est le tableaux associatif sur lequel on veut faire le tri. Le deuxième argument est la clé associative sur laquelle le tri est fait (par exemple une date). Le troisième est si le tri est ascendant (false) ou bien descendant (true).


//on crée les tableaux
$array[] = array('nom' => 'Labrador', 'ordre'=> 3);
$array[] = array('nom' => 'Boxer', 'ordre'=> 7);
$array[] = array('nom' => 'Bengal', 'ordre'=> 3);
$array[] = array('nom' => 'Pixie Bob', 'ordre'=> 2);
$array[] = array('nom' => 'Hirondelle', 'ordre'=> 1);
$array[] = array('nom' => 'Cardinal', 'ordre'=> 8);

/*
print_r($array);
Array
(
    [0] => Array
        (
            [nom] => Labrador
            [ordre] => 3
        )
    [1] => Array
        (
            [nom] => Boxer
            [ordre] => 7
        )
    [2] => Array
        (
            [nom] => Bengal
            [ordre] => 3
        )
    [3] => Array
        (
            [nom] => Pixie Bob
            [ordre] => 2
        )
    [4] => Array
        (
            [nom] => Hirondelle
            [ordre] => 1
        )
    [5] => Array
        (
            [nom] => Cardinal
            [ordre] => 8
        )
)
*/
//exécution du tri
$array = insert_sort($array,'ordre');
/*
Deuxième print_r du tableau, mais cette fois il est ordonné
Array
(
    [0] => Array
        (
            [nom] => Hirondelle
            [ordre] => 1
        )
    [1] => Array
        (
            [nom] => Pixie Bob
            [ordre] => 2
        )
    [2] => Array
        (
            [nom] => Labrador
            [ordre] => 3
        )
    [3] => Array
        (
            [nom] => Bengal
            [ordre] => 3
        )
    [4] => Array
        (
            [nom] => Boxer
            [ordre] => 7
        )
    [5] => Array
        (
            [nom] => Cardinal
            [ordre] => 8
        )
)
*/
Partagez cette article: Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Digg
  • Facebook
  • del.icio.us
  • Google
  • Live
  • Pownce
  • Wikio FR
  • Mixx
  • Sphinn
  • StumbleUpon

Ajouter mon fil RSS à votre agrégateur de contenu préféré.