Trier un tableau – Découvrir les fonctions de PHP

Les tableaux en PHP sont indispensables et nous allons voir comment les trier. Nous allons commencer par les fonctions simples à utiliser et ensuite nous utiliserons les fonctions qui permettent de faire des tris plus complexes.

Les fonctions de tri ont une nomenclature bien particulière qui permet de savoir exactement ce que fait la fonction. Par défaut toutes les fonctions contiennent le mot « sort« . Ensuite certaines lettres sont ajoutées au début du nom de la fonction. Par exemple la lettre « k » (par exemple avec la fonction ksort) sert à trier sur les clefs. Il y a donc le « k » pour trier sur les clefs, le « a » pour garder la relation entre les clefs et les valeurs, le « r » pour trier en ordre inverse et le « u » pour trier avec une fonction personnelle.

bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Le premier paramètre que prend sort est le tableau que vous souhaitez trier. Le tri se fait par rapport aux valeurs. Comme pour toutes les fonctions de tri il faut éviter que le tableau passé en paramètre contienne des types de valeur différents sinon le résultat risque d’être imprévisible.
Le second paramètre, optionnel, est un flag qui permet de modifier le comportement du tri.

Nous allons voir quelques exemples d’utilisations

/* compare les éléments normalement */
$tableau = array('c', 'd', 'b', 'a');
sort($tableau);
var_dump($tableau);
//array
//  0 => string 'a' (length=1)
//  1 => string 'b' (length=1)
//  2 => string 'c' (length=1)
//  3 => string 'd' (length=1)
 
/* compare les éléments comme des chaînes de caractères */
$tableau = array('10', '1', '2', '20');
sort($tableau, SORT_STRING);
var_dump($tableau);
//array
//  0 => string '1' (length=1)
//  1 => string '10' (length=2)
//  2 => string '2' (length=1)
//  3 => string '20' (length=2)
 
/* compare les éléments comme des entiers */
$tableau = array('10', '1', '2', '20');
sort($tableau, SORT_NUMERIC);
var_dump($tableau);
//array
//  0 => string '1' (length=1)
//  1 => string '2' (length=1)
//  2 => string '10' (length=2)
//  3 => string '20' (length=2)

La doc pour la fonction sort est disponible ici

bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Cette fonction fonctionne exactement comme la fonction sort une différence près, la fonction rsort tri en ordre inverse.
Pas besoin de faire d’exemple, ce serait les mêmes que pour sort !
La doc pour la fonction rsort est disponible ici

bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Cette fonction, encore une fois, est presque identique à la fonction sort à la différence qu’elle garde la relation entre les index et les valeurs
On peut, comme pour la fonction sort, utiliser des flags pour modifier le comportement du tri.

<?php
/* compare les éléments normalement, gardant les relations entre les clefs et les valeurs */
$tableau = array('c', 'd', 'b', 'a');
asort($tableau);
var_dump($tableau);
//array
//  3 => string 'a' (length=1)
//  2 => string 'b' (length=1)
//  0 => string 'c' (length=1)
//  1 => string 'd' (length=1)

La doc pour la fonction asort est disponible ici

bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Fonctionne exactement comme la fonction asort à la différence qu’elle trie en ordre inverse.

La doc pour la fonction arsort est disponible ici

bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Cette fonction de tri, contrairement aux autres, fait le tri en fonction des clefs. Elle maintient la relation entre les clefs et les valeurs.

Encore une fois on peut utiliser des flags pour modifier le comportement de la fonction de tri.

<?php
/* compare les éléments normalement*/
$tableau = array(1 => 'c', 0 => 'd', 3 => 'b', 4 => 'a');
ksort($tableau);
var_dump($tableau);
//array
//  0 => string 'd' (length=1)
//  1 => string 'c' (length=1)
//  3 => string 'b' (length=1)
//  4 => string 'a' (length=1)
 
/* compare les éléments normalement */
$tableau = array('n' => 'c', 'd' => 'd', 'a' => 'b', 'g' => 'a');
ksort($tableau);
var_dump($tableau);
//array
//  'a' => string 'b' (length=1)
//  'd' => string 'd' (length=1)
//  'g' => string 'a' (length=1)
//  'n' => string 'c' (length=1)

La doc pour la fonction ksort est disponible ici

bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) :
Fonctionne exactement comme la fonction krsort à la différence qu’elle trie en ordre inverse.

La doc pour la fonction krsort est disponible ici

bool usort ( array &$array , callable $cmp_function ) :
Cette fonction permet de trier un tableau grâce à notre propre fonction de tri. Pour cela on passe en second paramètre une fonction qui doit retourner un booléen. Les fonctions lambda sont parfaites pour cela.
On utilise généralement cette fonction de tri pour des tableaux multidimensionnels.

Dans l’exemple nous avons un tableau multi-dimensionnel, plus exactement un tableau de tableau. Nous souhaitons trier le tableau en fonction de « l’id« . Pour résumer nous allons trier les sous-tableaux en fonction du contenu de ceux-ci (et plus particulièrement l’id dans notre exemple).

<?php
/* compare les éléments par rapport à l'id grâce à une fonction lambda */
/* Utilisation avec un callback */
$tableau = array(
  0 => array(
    'id' => 18,
    'name' => 'Roger'
  ),
	1 => array(
    'id' => 5,
    'name' => 'George'
  ),
	2 => array(
    'id' => 7,
    'name' => 'Mike'
  )
);
function my_compare_function ($a, $b)
{
  return $a['id'] > $b['id'];
}
usort($tableau, "my_compare_function");
var_dump($tableau);
//array
//  0 => 
//    array
//      'id' => int 5
//      'name' => string 'George' (length=6)
//  1 => 
//    array
//      'id' => int 7
//      'name' => string 'Mike' (length=4)
//  2 => 
//    array
//      'id' => int 18
//      'name' => string 'Roger' (length=5)
<?php
/* compare les éléments par rapport à l'id grâce à une fonction lambda */
/* Utilisation avec une fonction lambda */
$tableau = array(
  0 => array(
    'id' => 18,
    'name' => 'Roger'
  ),
	1 => array(
    'id' => 5,
    'name' => 'George'
  ),
	2 => array(
    'id' => 7,
    'name' => 'Mike'
  )
);
usort($tableau, function ($a, $b){ return $a['id'] > $b['id']; });
var_dump($tableau);
//array
//  0 => 
//    array
//      'id' => int 5
//      'name' => string 'George' (length=6)
//  1 => 
//    array
//      'id' => int 7
//      'name' => string 'Mike' (length=4)
//  2 => 
//    array
//      'id' => int 18
//      'name' => string 'Roger' (length=5)

La doc pour la fonction usort est disponible ici

bool uasort ( array &$array , callable $cmp_function ) :
Cette fonction fonctionne comme la fonction usort à la différence qu’elle garde la relation entre les clefs et les valeurs.

<?php
/* compare les éléments par rapport à l'id grâce à une fonction lambda */
/* Utilisation avec une fonction lambda */
$tableau = array(
  0 => array(
    'id' => 18,
    'name' => 'Roger'
  ),
	1 => array(
    'id' => 5,
    'name' => 'George'
  ),
	2 => array(
    'id' => 7,
    'name' => 'Mike'
  )
);
uasort($tableau, function ($a, $b){ return $a['id'] > $b['id']; });
var_dump($tableau);
//array
//  1 => 
//    array
//      'id' => int 5
//      'name' => string 'George' (length=6)
//  2 => 
//    array
//      'id' => int 7
//      'name' => string 'Mike' (length=4)
//  0 => 
//    array
//      'id' => int 18
//      'name' => string 'Roger' (length=5)

La doc pour la fonction uasort est disponible ici

bool uksort ( array &$array , callable $cmp_function ) :
Cette fonction fonctionne comme la fonction usort à la différence qu’elle trie en sur les clefs et non pas les valeurs.

La doc pour la fonction uksort est disponible ici

Conclusion

On a vu pas mal de fonctions avec beaucoup d’exemples. Evidemment, il y d’autres solutions pour trier un tableau en PHP. Cependant, nous avons fait le tour des fonctions qui vous servirons dans 90% des cas.

Comme d’habitude, n’hésitez pas à aller voir la doc lorsque vous avez des doutes !

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Une réponse pour “Trier un tableau – Découvrir les fonctions de PHP”

  1. Lolo17 septembre 2015 à 17 h 56 minRépondre

    Merci pour toute cette documentation, je suis parvenu à régler mon problème grâce à toi, bonne continuation.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.