begin process at 2012 02 15 20:47:17
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > 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

Note :
Aucune note
Catégorie :Divers Classé sous :array, tableau, indice, chemin, arborescence Niveau :Initié Date de création :31/08/2007 Date de mise à jour :18/09/2007 06:28:49 Vu :4 543

Auteur : 8Tnerolf8

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

Source avec Zip CLASSE D'OBJET DE RECHERCHE DE MOTS DANS DES TABLEAUX ET/OU ...
GÉNÉRATEUR HTML DE MAP POUR IMAGE CLIQUABLE
Source avec Zip PORTAGE PDO DE MES ANCIENNES PUBLICATIONS
EQUIVALENT DE INNERHTML JAVASCRIPT, MAIS GLOBAL
GÉNÉRATEUR SQL D'INSERTION OU DE MISE À JOUR

 Sources de la même categorie

Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK
Source avec Zip Source avec une capture EL COYOTOS LIVRE D'OR PHP 5 par elcoyotos
COMPTEUR DE VISITE - FICHIER TXT - CODE MINIMAL par SuperChouquette

 Sources en rapport avec celle ci

PARCOURS DE TABLEAU À L'AIDE D'ATTRIBUTS HTML "NAME par choy
Source avec Zip EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY par prince418
Source avec Zip XML ET TABLEAUX : UNE CLASSE COMPLÈTE QUI CONVERTIT UN DOCUM... par DaCodeManiak
Source avec une capture UNE PETITE FONCTION POUR AFFICHER LES TABLEAUX PHP par bletous
AFFICHAGE D'UN TABLEAU HTML À PARTIR D'UN ARRAY par Vince66

Commentaires et avis

Commentaire de coucou747 le 31/08/2007 10:59:57 administrateur CS

c'est une fonction qui peut se montrer utile, cependant... <?php a la place de <? ne porte plus confusion avec un xml, ce qui te permet de voi ton script fonctionner sur tout serveur :)

Ensuite : pourquoi renvoyer une chaine de caractere ? et pourquoi afficher cette chaine avec print_r ? (dans ton exemple) on ne doit pas avoir de fonction ou classes divine; une classe ou fonction divine fait tout elle meme sans rien demander aux autres... tu devrais renvoyer le tableau directement

j'ai pas teste cette fonction (je ne suis pas sur ma machine...) j'aurais probablement ecrit un truc genre :

function find_recursif($tab, $valeur, $prof=0){
  $prof2=$prof+1;
  foreach ($tab as $indice=>$a){
    if ($a===$valeur){
      return array($prof=>$indice);
    }else if (gettype($a)==='array' && (false!==($b=find_recursif($a, $valeur, $prof2)))){
      $b[$prof]=$indice;
      return $b;
    }
  }
  return false;
}

Commentaire de 8Tnerolf8 le 31/08/2007 20:54:24

Concernant le <? au lieu de <?php, c'est tout simplement parce que, en apprenant le PHP, j'ai vu que l'on pouvait utiliser cette syntaxe. Donc, par soucis de gagner du temps de frappe, j'ai pris cette mauvaise habitude. De plus, je n'ai aucune connaissance en xml.

Je te remercie pour la proposition de code que tu fais, cela démontre la différence entre tes compétences de PHP et les miennes.

Si dans ma soumission j'ai proposé une chaine de caractère, c'est à titre informatif, sachant que pour mes besoins personnels je renverrai un tableau qui me permettra via un eval et une concaténation de chaine de pointer sur l'élément de tableau recherché.

J'ai écris ce code avec comme objectif principal : Rédiger une fonction récursive avec renvoi d'une valeur.

Ne sachant pas ce qu'est une classe ou une fonction divine, j'ai concentré tous mes efforts sur le parcours des tableaux.

Commentaire de 8Tnerolf8 le 18/09/2007 06:36:35

Bonjour

Ma fonction était bancale car elle ne supprimait pas les tableaux contenant des tableaux qui n'avaient pas la valeur recherchée. Du coup, le résultat retourné contenait, en plus du bon chemin, tous les indices de tableaux ayant au moins un tableau dans leurs éléments.

Ce bug est résolu, et j'ai fait en sorte que la fonction traite les indexs associatifs et numériques.

 Ajouter un commentaire


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&#224; j'ai un gros prbl&#232;me, ca fait deux jours que je cherche, et je n'ai trouv&#233; la solution nul part...j'ai un formulaire avec ::: Arborescence dossier en php ::: HELP ME PLEASE [ par abdelmetz ] D&#233;j&#224; merci d'avance pour votre soutiens, &#231;a fais 2 jours que je gal&#232;re la dessus...J'ai &#233;cris listing des fichiers et dossier comparer array et requête [ par alecto ] Bonjour &#224; tous et merci d'avance pour ceux qui pourront m'aider, voici mon pb : &nbsp;<?xml:namespace prefix = o ns Tri multi-dimensionnel [ par Aline77 ] Bonjour,J'ai un tableau :Array(&nbsp;&nbsp;&nbsp; [10900] =&gt; Array&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& Fonction callback et classes [ par malalam ] &nbsp;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-&gt;rules as $key =&gt; $value) { echo $key." = ".$value."&lt;br&gt;"; } 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 20,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales