Accueil > > > DÉTERMINATION DU CHEMIN D'INDEXAGE MENANT À UNE VALEUR DANS UN TABLEAU MULTI-DIMENSIONNEL
DÉTERMINATION DU CHEMIN D'INDEXAGE MENANT À UNE VALEUR DANS UN TABLEAU MULTI-DIMENSIONNEL
Information sur la source
Description
Cette fonction sert à trouver tous les indices qu'il faut suivre dans un tableau multidimentionnel pour localiser une valeur dans ce tableau. Elle est surtout pratique si l'on doit travailler sur un tableau dont on ne connait pas la structure et la taille. Elle renvoie une chaîne contenant tous les indices menant à la valeur recherchée. La recherche est sensible à la casse, et les index associatifs ne doivent pas contenir d'apostrophes ['].
Source
- <?php
- function Trouve_indice($Tableau,$Val)
- {
- static $Drapeau=false;static $Compteur=false;static $Result=array(); static $Tbl_origine=array();
- //Cette fonction sert à trouver tous les indices dans un tableau multidimentionnel pour localiser une valeur dans ce tableau
-
- if($Compteur==false) //$Compteur permet d'assigner à $Tbl_origine le tableau passé en paramètre lors du premier appel de la fonction
- { //En effet, lorsque l'on trouve la valeur le tableau en cours est celui contenant cette valeur.
- $Tbl_origine=$Tableau;
- $Compteur=true;
- }
-
- if(in_array($Val,$Tableau))
- {
- $Drapeau=true;
- $Result[]=array_search($Val,$Tableau);
- /*On récupère le chemin d'indexation menat à la valeur
- Afin d'éviter Fatal error: Cannot use string offset as an array in..., on :
-
- - Inverse le tableau de résultats
- - Remonte l'arborescence jusqu'à trouver l'indice "racine" menant à la valeur
- - On renvoie la chaîne de caractères composée */
-
- $Result=array_reverse($Result);
-
- foreach($Result as $Check)
- {
- //Pour gérer les indices associatifs
- $Guillemets=gettype($Check)=="string" ? "'" : "";
- $Code="[".$Guillemets.$Check.$Guillemets."]".$Code;
-
- eval('$Test=$Tbl_origine'.$Code.';');
- if($Test==$Val) break;
- }
- return $Code;
- }
-
- foreach($Tableau as $Cle=>$Valeur)
- {
- if($Drapeau==true) break;//break; Pour remonter l'arborescence d'appel de la fonction en gardant le résultat
-
- if(is_array($Valeur))
- {
- $Result[]=$Cle; //$Result[]=$Cle: On rajoute l'indice parcouru dans le tableau de résultats
- $Result=Trouve_indice($Valeur,$Val);
- }
- }
- return $Result;
- }
- ?>
<?php
function Trouve_indice($Tableau,$Val)
{
static $Drapeau=false;static $Compteur=false;static $Result=array(); static $Tbl_origine=array();
//Cette fonction sert à trouver tous les indices dans un tableau multidimentionnel pour localiser une valeur dans ce tableau
if($Compteur==false) //$Compteur permet d'assigner à $Tbl_origine le tableau passé en paramètre lors du premier appel de la fonction
{ //En effet, lorsque l'on trouve la valeur le tableau en cours est celui contenant cette valeur.
$Tbl_origine=$Tableau;
$Compteur=true;
}
if(in_array($Val,$Tableau))
{
$Drapeau=true;
$Result[]=array_search($Val,$Tableau);
/*On récupère le chemin d'indexation menat à la valeur
Afin d'éviter Fatal error: Cannot use string offset as an array in..., on :
- Inverse le tableau de résultats
- Remonte l'arborescence jusqu'à trouver l'indice "racine" menant à la valeur
- On renvoie la chaîne de caractères composée */
$Result=array_reverse($Result);
foreach($Result as $Check)
{
//Pour gérer les indices associatifs
$Guillemets=gettype($Check)=="string" ? "'" : "";
$Code="[".$Guillemets.$Check.$Guillemets."]".$Code;
eval('$Test=$Tbl_origine'.$Code.';');
if($Test==$Val) break;
}
return $Code;
}
foreach($Tableau as $Cle=>$Valeur)
{
if($Drapeau==true) break;//break; Pour remonter l'arborescence d'appel de la fonction en gardant le résultat
if(is_array($Valeur))
{
$Result[]=$Cle; //$Result[]=$Cle: On rajoute l'indice parcouru dans le tableau de résultats
$Result=Trouve_indice($Valeur,$Val);
}
}
return $Result;
}
?>
Conclusion
Un petit exemple :
$Couleurs=array( array("vert","bleu","jaune","r ouge"), array("rose","violet"), array("marron","no ir","gris",array("lie de vin","caca d'oie","vert d'eau","fuchia","La bonne est la"=>"blanc")), array("pourpre","orange","kaki"));
$Indice=Trouve_indice($Couleurs,"blanc"); echo $Indice //Ca affiche [2][3]['La bonne est la']
eval('echo $Couleurs'.$Indice.';'); //Cela affichera blanc
Historique
- 04 septembre 2007 06:58:46 :
- Modification de la fonction pour qu'elle renvoie un tableau.
Modification de l'exemple pour qu'il affiche la valeur recherchée.
- 18 septembre 2007 06:28:49 :
- Débuggage de la fonction pour qu'elle renvoie correctement le chemin d'indexation où que soit la valeur à trouver.
Amélioration de celle-ci pour qu'elle prenne en compte les indexs associatifs.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
probleme array tableau [ par guiguipumpkin ]
bonjour,je ne trouve pas la fonction php qui permet de supprimer un element d'un tableau array, suivant un indice iun peu comme array_shift mais en po
Tableau stockant une arborescence virtuellement infinie [ par malalam ]
Salut a tous, j'ai besoin d'avis...j'essaye de reflechir a ca tout seul dans mon coin, mais bon, il ne fait pas beau ici a Nuremberg, c'est le mili
tableau associatif [ par tobleronne ]
Bonjour,Je souhaite renseigner un tableau a plusieurs dimensions mais rien n'y fait ?!?J'ai une boucle qui alimenterais un tableau du style : $monTabl
Problème de tableau Array [ par sebmayer ]
Bonjour,voilà j'ai un gros prblème, ca fait deux jours que je cherche, et je n'ai trouvé la solution nul part...j'ai un formulaire avec
::: Arborescence dossier en php ::: HELP ME PLEASE [ par abdelmetz ]
Déjà merci d'avance pour votre soutiens, ça fais 2 jours que je galère la dessus...J'ai écris listing des fichiers et dossier
comparer array et requête [ par alecto ]
Bonjour à tous et merci d'avance pour ceux qui pourront m'aider, voici mon pb : <?xml:namespace prefix = o ns
Tri multi-dimensionnel [ par Aline77 ]
Bonjour,J'ai un tableau :Array( [10900] => Array ( &
Fonction callback et classes [ par malalam ]
Salut :-)J'ai un petit soucis : je veux utiliser array_filter() dans une fonction membre d'une classe.J'ai defini ma fonction callback dans cett
Tableau array etc... [ par Cestmoi ]
J'affiche des données de la facon suivante :foreach($server->rules as $key => $value) { echo $key." = ".$value."<br>"; }
Charger un array depuis mysql [ par mdog ]
bonjour, je cherche a charger depuis mysql un tableau array pour pouvoir l'integrer dans une page, seulement je ne sais pas coment faire, avec ma syta
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|