DÉTERMINATION DU CHEMIN D'INDEXAGE MENANT À UNE VALEUR DANS UN TABLEAU MULTI-DIM
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
31 août 2007 à 10:59
cs_8Tnerolf8
Messages postés30Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 novembre 2009
-
18 sept. 2007 à 06:36
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_8Tnerolf8
Messages postés30Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 novembre 2009 18 sept. 2007 à 06:36
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.
cs_8Tnerolf8
Messages postés30Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention17 novembre 2009 31 août 2007 à 20:54
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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 31 août 2007 à 10:59
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;
}
18 sept. 2007 à 06:36
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.
31 août 2007 à 20:54
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.
31 août 2007 à 10:59
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;
}