Cours par Webcam

Cours par Webcam

Formateur Web pour adultes depuis plus 11 ans, je vous propose des COURS collectifs par WEBCAM en LIVE pour booster vos connaissances et être autonome dans la création de site.

En savoir plus

PHP - Bases

PHP - Algorithmie

PHP - Chaîne

PHP - Tableau

PHP - Formulaires

PHP - Fonctions Usuelles

Données entres pages

Environnement et Interaction

PHP objet (POO)

Facebook
Twitter
LinkedIn

Trier les tableaux

Il existe plusieurs façons de trier un tableau, par les valeurs, les clés, en ordre inverse, en conservant les associations clé-valeur. Il est possible de faire un tri plus naturel (plus humain), un tri avec une fonction utilisateur ou encore un tri multicritère.

Tri par valeur

Vous pouvez trier un tableau par ordre alphabétique avec la fonction sort() qui prend comme paramètre le tableau à trier. La fonction trie mais ne renvoie rien.

<?php
$tab = array('daniel','isabelle','david','robert', 'antoine');
sort($tab);
print_r($tab);
?>

Affichage

Array ( [0] => antoine [1] => daniel [2] => david [3] => isabelle [4] => robert )

Le comportement de tri peut être modifié par des constantes de tri à fourni en deuxième paramètre de la fonction.

  • SORT_REGULAR : compare les éléments normalement (ne modifie pas les types)
  • SORT_NUMERIC : compare les éléments numériquement
  • SORT_STRING : compare les éléments comme des chaînes de caractères
  • SORT_NATURAL – compare les éléments comme des chaînes de caractères en utilisant l’ordre nature comme le fait la fonction natsort()
  • SORT_FLAG_CASE – peut être combiné (grâce à l’opérateur OR) avec sort_string ou sort_natural pour trier les chaînes sans tenir compte de la casse.
<?php
$tab = array('antoine1','antoine2','antoine3','antoine4', 'antoine10');
sort($tab,SORT_NATURAL);
print_r($tab);
echo '<br>';
$tab = array('antoine1','antoine2','antoine3','antoine4', 'antoine10');
sort($tab); // par défaut le tri se fait avec la constante SORT_REGULAR
print_r($tab);
?>

Affichage

Array ( [0] => antoine1 [1] => antoine2 [2] => antoine3 [3] => antoine4 [4] => antoine10 )
Array ( [0] => antoine1 [1] => antoine10 [2] => antoine2 [3] => antoine3 [4] => antoine4 )

Vous remarquez que dans le premier cas, le tri se fait de façon plus naturel.

Tri en ordre inverse

Vous pouvez trier un tableau en ordre inverse avec la fonction rsort() qui prend comme paramètre le tableau à trier.

<?php
$tab = array('daniel','isabelle','david','robert', 'antoine');
rsort($tab);
print_r($tab);
?>

Affichage

Array ( [0] => robert [1] => isabelle [2] => david [3] => daniel [4] => antoine )

Comme pour la fonction sort(), rsort() trie mais ne renvoie rien.

Association clé-valeur

Si vous voulez trier en conservant les associations clé-valeur, utilisez asort() au lieu de sort() pour trier par ordre alphabétique, et arsort() au lieu de rsort() pour trier en ordre inverse.

<?php
$tab = array('daniel1','isabelle2','david3','robert4', 'antoine5');
asort($tab);
print_r($tab);
?>

Affichage

Array ( [4] => antoine5 [0] => daniel1 [2] => david3 [1] => isabelle2 [3] => robert4 )

Vous remarquez que les valeurs rangées maintenant par ordre alphabétique ont conservé leurs clés initiales.

Trier par clé

Si vous voulez trier en fonction des clés et non pas des valeurs, utilisez ksort() au lieu de asort() pour trier par ordre alphabétique, et krsort() au lieu de arsort() pour trier en ordre inverse.

<?php
$tab = array('un'=>'daniel','deux'=>'isabelle','trois'=>'david','quatre'=>'robert');
ksort($tab);
print_r($tab);
?>

Affichage

Array ( [cinq] => antoine [deux] => isabelle [quatre] => robert [trois] => david [un] => daniel )

Vous remarquez que les valeurs sont rangées maintenant par ordre alphabétique des clés.

Tri naturel

Si vous souhaitez faire un tri plus humain, utilisez natsort()

<?php
$tab = array('antoine1','antoine2','antoine3','antoine4', 'antoine10');
natsort($tab);
print_r($tab);
echo '<br>';
$tab = array('antoine1','antoine2','antoine3','antoine4', 'antoine10');
sort($tab);
print_r($tab);
?>

Affichage

Array ( [0] => antoine1 [1] => antoine2 [2] => antoine3 [3] => antoine4 [4] => antoine10 )
Array ( [0] => antoine1 [1] => antoine10 [2] => antoine2 [3] => antoine3 [4] => antoine4 )

Vous remarquez que dans le premier cas les valeurs sont rangées de manière plus naturelle.

Tri insensible à la casse

La fonction natcasesort() est identique à natsort() mais fait une comparaison insensible à la casse.

<?php
$tab = array('antoine1','Antoine2','antoine3','Antoine4', 'antoine10');
natcasesort($tab);
print_r($tab);
echo '<br>';
$tab = array('antoine1','Antoine2','antoine3','Antoine4', 'antoine10');
natsort($tab);
print_r($tab);
?>

Affichage

Array ( [0] => antoine1 [1] => Antoine2 [2] => antoine3 [3] => Antoine4 [4] => antoine10 )
Array ( [1] => Antoine2 [3] => Antoine4 [0] => antoine1 [2] => antoine3 [4] => antoine10 )

Vous remarquez que dans le premier cas le tri est insensible à la casse.

Tri avec une fonction utilisateur

Si vous souhaitez faire un tri plus personnalisé, comme par exemple sur la taille des chaînes d’un tableau, vous pouvez utiliser la fonction usort(). Le premier paramètre est le tableau à trier et le deuxième est la fonction de comparaison. La fonction de comparaison accepte deux arguments qui sont comparés et doit retourner soit la valeur 1 (argument a > argument b), la valeur 0 (argument a == argument b), ou la valeur -1 (argument a < argument b).

<?php
function cmp($a,$b){
if(strlen($a) == strlen($b)){ //  valeur précedente $a comparée à la valeur suivante $b
return 0;
}
return strlen($a)>strlen($b)?1:-1;
}
$tab = ['deux','un','quatre','trois','six'];
usort($tab,'cmp');
print_r($tab);
?>

Affichage

Array ( [0] => un [1] => six [2] => deux [3] => trois [4] => quatre )

Vous remarquez que le tri ne se fait pas sur les valeurs mais sur la taille (nombre de caractères) de chaque valeur.

Tri multicritère

Vous pouver trier un tableau par rapport au tri d’un autre tableau avec la fonction array_multisort(). Chaque valeur du premier est jumélée à chaque valeur du deuxième tableau.

<?php
$tab1 = ['deux','un','quatre','trois','six'];
$tab2 = ['deuxb','una','quatred','troisc','sixf'];
array_multisort($tab1,$tab2);
print_r($tab1);
echo '<br>';
print_r($tab2);
?>

Affichage

Array ( [0] => deux [1] => quatre [2] => six [3] => trois [4] => un )
Array ( [0] => deuxb [1] => quatred [2] => sixf [3] => troisc [4] => una )

Vous remarquez que le tri du premier tableau se fait sur les valeurs et que les entrées du second tableau correspondant aux valeurs jumelles du premier tableau.

Vous pouvez pour chaque tableau fournir des options de tri supplémentaires, les mêmes options qu’avec la fonction sort().

  • SORT_REGULAR : compare les éléments normalement (ne modifie pas les types)
  • SORT_NUMERIC : compare les éléments numériquement
  • SORT_STRING : compare les éléments comme des chaînes de caractères
  • SORT_NATURAL – compare les éléments comme des chaînes de caractères en utilisant l’ordre nature comme le fait la fonction natsort()
  • SORT_FLAG_CASE – peut être combiné (grâce à l’opérateur OR) avec sort_string ou sort_natural pour trier les chaînes sans tenir compte de la casse.
<?php
$tab1 = ['deux','un','quatre','quatre','quatre','trois','six'];
$tab2 = ['deuxb','una','quatred','quatree','quatref','troisc','sixf'];
array_multisort($tab1,$tab2,SORT_DESC);
print_r($tab1);
echo '<br>';
print_r($tab2);
?>

Affichage

Array ( [0] => deux [1] => quatre [2] => quatre [3] => quatre [4] => six [5] => trois [6] => un )
Array ( [0] => deuxb [1] => quatref [2] => quatree [3] => quatred [4] => sixf [5] => troisc [6] => una )

Dans cet exemple, comme dans le précédent exemple, le tri du premier tableau se fait sur les valeurs et les entrées du second tableau correspondant aux valeurs jumelles du premier tableau, cependant lorsque les valeurs sont identiques sur le premier tableau (‘quatre’), les valeurs jumelées du deuxième tableau sont triées par ordre décroissant.

A lire aussi

tutowebdesign

Afficher du contenu au scroll

Afficher du contenu au scroll Voici un effet impressionnant et pourtant très facile à mettre en place sur vos pages. Le principe consiste à faire

Lire »