Médiaforma

PHP MySQL – Exercice sur le tri des tableaux associatifs

Print Friendly

Voici un deuxième exercice un peu plus complexe.
Ecrivez le code nécessaire pour trier par ordre alphabétique sur les clés et sur tous les niveaux ce tableau de tableau :
$chiffres = array("Romain" => array("un"=>"I", "deux"=>"II", "trois"=>"III", "quatre"=>"IV", "cinq"=>"V"),
"Arabe" => array("un"=>"1", "deux"=>"2", "trois"=>"3", "quatre"=>"4", "cinq"=>"5"));

Solution

Faites une pause dans la vidéo pour vous permettre de saisir le code. Poursuivez la vidéo pour voir la solution.
Vous vous en doutez certainement, la solution de ce problème réside dans la définition d’une fonction récursive. Pour bien faire les choses, nous définirons deux fonctions :
Une responsable du tri des données et une responsable de leur affichage.
Commencez par définir le tableau associatif $chiffres.
Cette opération terminée, appelez les fonctions trier et afficher en leur transmettant le tableau $chiffres.
Pour être en mesure de modifier les données de façon durable (c’est-à-dire en dehors de la fonction), la fonction trier travaille avec l’adresse du tableau qui lui est passé et non avec le tableau lui-même.
Un tri croissant est effectué sur les clés. Puis une boucle foreach parcourt tous les éléments du tableau. Un test est effectué sur chaque valeur. S’il s’agit d’un tableau, il est passé de façon récursive à la fonction trier pour effectuer un tri croissant sur ses valeurs.
La fonction affiche est également récursive. Elle utilise une boucle foreach pour parcourir tous les éléments du tableau associatif. Pour chaque couple clé/valeur, la clé est affichée. Si la valeur est un tableau, il est passé de façon récursive à la fonction affiche. Dans le cas contraire, il est affiché, suivi d’un passage à la ligne.
Remarquez les balises blockquote et /blockquote autour de la boucle foreach. C’est grâce à ces instructions que les éléments affichés sont indentés vers la droite.

<?php
function trier(&$a){
ksort($a);
foreach($a as $cle=>&$valeur) {
if (is_array($valeur))
trier($valeur);
}
}

function afficher($a){
echo "<blockquote>";
foreach($a as $cle=>$valeur) {
echo $cle." : ";
if (is_array($valeur))
afficher($valeur);
else
echo $valeur."
";
}
echo "

";
}

$chiffres = array("Romain" => array("un"=>"I", "deux"=>"II", "trois"=>"III", "quatre"=>"IV", "cinq"=>"V"),
"Arabe" => array("un"=>"1", "deux"=>"2", "trois"=>"3", "quatre"=>"4", "cinq"=>"5"));
trier($chiffres);
afficher($chiffres);
?>

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply