pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010
-
28 déc. 2005 à 12:37
pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010
-
29 déc. 2005 à 11:38
Bonjour!
voici un exemple de tableau :
$Liste1[0]= Array(132,1);
$Liste1[1]= Array(516,1);
$Liste1[2]= Array(891,1);
Lorsque je fais:
$Indice="0";
echo $Liste1[$Indice];
j'ai "Array" qui s'affiche : c'est normal !!!
Sauf que si je veux faire un truc du style :
$Indice="0[0]";
ou
$Indice="[0][0]";
alors là il me plante mon echo $Liste1[$Indice] alors que je voudrais voir 132 d'afficher.
Comment faire pour passer les indices d'un tableau numérique dans ma variable?
Merci de votre réponse.
A bientôt.
pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010 28 déc. 2005 à 17:12
J_G j'ai fait une fonction récursive telle que tu le fais.
Si j'ai bien compris, tu as une première fonction qui récupére le tableau où il y a la valeur qui nous intéresse en ensuite une deuxième qui cherche la valeur dans ce tableau.
C'est ça???
Voilà ma solution en une fonction :
function RechercheValeurTableau($Tableau,$Valeur,$IndexARechercher)
{
$Trouve=0;
$i=0;
while($Trouve==0 && $i<count($Tableau))
{
if(is_array($Tableau[$i]))
{
$Indice=RechercheValeurTableau($Tableau[$i],$Valeur,$IndexARechercher);
if($Indice!=-1)
{
$Trouve=1;
$i="[".$i."]".$Indice;
}
else
{
$i++;
}
}
else
{
if($IndexARechercher!="")
{
if(isset($Tableau[$IndexARechercher]))
{
if($Tableau[$IndexARechercher]=$Valeur)
{
$Trouve=1;
$i="[".$IndexARechercher."]";
}
else
{
$i++;
}
}
else
{
$i++;
}
}
else
{
if($Tableau[$i]==$Valeur)
{
$Trouve=1;
$i="[".$i."]";
}
else
{
$i++;
}
}
}
}
if($i==count($Tableau))
{
$i=-1;
}
return $i;
}
Je crains les critiques :( mais vous êtes là pour me corriger ;)
En tout cas ça fait exactement ce que je veux NAHHH!!! :)
pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010 28 déc. 2005 à 22:34
Petit problème J_G, je tape :
$Liste1=Array(Array(0,2));
$liste = "Liste1";
$indice = "[0][0]";
echo $"\$liste\$indice";
Et alors là j'ai un petit message d'erreur qui me dit :
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in c:\program files\easyphp1-8\www\... on line 56
2. au lieu de mettre Trouve à 1 pour sortir de la boucle, SORT de la
boucle en utilisant la commande "break;" ("continue;" retourne au début
de la boucle)
/*2*/ = > donc on est d'accord... tu n'utilises que des
tableau indexés (que des clefs entières avec les chiffres qui se
suivent bien gentillement...)
De plus ! aucun test pour savoir si la clef existe :(genre isset ou array_key_exists ):
/*3*/ => utilise des bool
/*4*/ => le plus grave !!!
Mélange des types (comme disait mon prof de maths : "tu mélanges les carottes et les bettrave")
Après cette opération, $i est un string... Or tu l'utilises encore dans
la condition du while en le comparrant à un entier => aucune
garantie de résultat !
Si tu veux continuer à faire une soupe avec plein de légumes, utilise
bien le comparateur d'identicité (===) et non d'égalité (==)...
Voilà pour un petit commentaire, vite-fait-mal-fait !
pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010 29 déc. 2005 à 01:05
Oula oui t'as tout à fait raison.
Je crois que je vais reprendre gentillement les deux fonctions que tu m'as proposé ;)
Sinon, j'ai remplacé echo $"\$liste\$indice"; par echo $"\$liste$indice"; et rien à faire c'est pareil. Au fait le \ en trop c'est j'ai fait des essais sans succès ...
pcmanprogrammeur
Messages postés126Date d'inscriptiondimanche 27 mars 2005StatutMembreDernière intervention16 octobre 2010 29 déc. 2005 à 10:25
Après réflexion (si si ça l'arrive), je me suis dit que tes fonctions permettaient de récupérer les valeurs des tableaux dans des tableaux dans des tableaux
dans des tableaux
... et non pas de pouvoir modifier le tableau d'origine. C'est pourquoi j'ai créé ma fonction qui permet d'indiquer le chemin. Comme ça je peux aller modifier à ma guise le contenu.
Ducoup, je vais reprendre tes remarques sur ma fonction.
Au fait, petite remarque de ma part : les 1 et 0 que j'utilise pour des booléens sont dûs à la déformation du C. Vu qu'en C le booléen n'existe pas, on utilise les entiers comme valeurs booléens.