lorik Posté 16 Juin 2005 Posté 16 Juin 2005 Bonjour, Je coince un peu avec les fonctions de tableau... J'ai un tableau de la forme $tab=array("val1"=>"coco", val2=>"lolo", val3=>"zozo"...); je voudrait par exemple faire une recherche dans le tableau sur la chaine 'val2', et recuperer dans une variable 'lolo'. Et clairement je patine entre les array_array_key, array_search et autres in_array... Merci par avance de votre aide.
Dan Posté 16 Juin 2005 Posté 16 Juin 2005 Salut Lorik, Dans ton cas un simple accès à la variable $tab['val2'] te donne la valeur "lolo" $var=$tab['val2']; Ou alors, une boucle foreach(). <?php$tab=array("val1"=>"coco", val2=>"lolo", val3=>"zozo");foreach ($tab as $key=>$value) { if($key=="val2") $var=$value;}print $var;?> ou encore $var=array_search("val2",array_flip($tab));print "$var"; Tous les chemins mènent à Rome
lorik Posté 16 Juin 2005 Auteur Posté 16 Juin 2005 Merci Dan, avec toi, tout parait toujours si simple...
lorik Posté 16 Juin 2005 Auteur Posté 16 Juin 2005 Re. Dan, puisque tu as l'air en forme je corse un peu le problème Finalement, mon tableau sera plutot de la forme : $tab=array( "var1" => array("info1", "info2"), "var2" => array("info3", "info4"), ) Même question, comment qu'je fais pour acceder à info1 et info2, bon dieu d'bois !!! qu'est ce que j'en ch.. avec ces tableaux... Merci à tous
WewEB Posté 16 Juin 2005 Posté 16 Juin 2005 Comme précédemment, tu accèdes au tableau directement depuis la variable. $tab=array( "var1" => array("info1", "info2"), "var2" => array("info3", "info4"),);echo $tab["var1"][0];// Retournera info1 Vérifie que ton tableau est bien formé et correspond bien à ce que tu cherches à faire (ici, info1 est une valeur -de clé 0- et non une clé).
lorik Posté 17 Juin 2005 Auteur Posté 17 Juin 2005 Bon, ça marche super, donc je complique encore Maintenant, dans mon tableau, j'ai plusieurs lignes contenant la meme clé : $tab=array( "var1" => array("info1", "info2"), "var2" => array("info3", "info4"), "var1" => array("info1", "info5")); je veux extraire les lignes contenant la même clé ("var1" dans l'exemple), puis boucler dessus (ça je dois savoir faire ) J'ai essayé avec $test=array_key($tab, "var1");$nb=count($test); Mais $nb reste désesperement à 0 (var1 existe, j'ai vérifié).J'ai essayé aussi avec $test=array_key($tab, "info1"), mais rien à faire... une lumière SVP... Par avance merci.
WewEB Posté 17 Juin 2005 Posté 17 Juin 2005 (modifié) Un tableau ne peut contenir deux fois la même clé. Si tu définis deux fois la clé, PHP efface la première valeur pour mettre la seconde. Exemple: $tab = array("var1" => "valeur1");echo $tab["var1"];// Retourne 'valeur1'$tab = array("var1" => "valeur1", "var1" => "valeur2");echo $tab["var1"];// Retourne 'valeur2'var_dump($tab);// Retourne 'array(1) { ["var1"]=> string(7) "valeur2" }'// Preuve que PHP a effacé le premier var1 array_key n'existe pas, voulais-tu dire array_keys ? Le fait que $nb soit toujours égal à 0 est donc logique (faire un count sur une variable autre qu'un tableau retourne toujours 0). Modifié 17 Juin 2005 par WewEB
lorik Posté 17 Juin 2005 Auteur Posté 17 Juin 2005 Merci WewEB. Oui, c'est bien array_keys dont je voulais parler. Donc en pratique, mon système n'est pas possible. Je vais donc voir cela differemment : Je vais construire un tableau $tab=array([] => array ('var1',' info1', 'info2')[] => array ('var2','info3','info4')[] => array ('var1','info1','info4')) Avec un tableau comme ça, est ce que je peux extraire les lignes contenant 'var1' ?
lorik Posté 17 Juin 2005 Auteur Posté 17 Juin 2005 Grrr ! $tab1=array("0" => array ('0','var1',' info1', 'info2'),"1" => array ('1','var2','info3','info4'),"2" => array ('2', 'var1','info1','info4'));$tab=array_keys($tab1, "var1");echo count($tab); La, je n'ai qu'un index, non ? et pourtant, ça marche toujours pas !!! Bouhhhhh
WewEB Posté 17 Juin 2005 Posté 17 Juin 2005 Ici, le tableau est carrément mal formé (le [] ne veut rien dire). A la limite, tu peux l'écrire comme suit: $tab=array( array ('var1',' info1', 'info2'), array ('var2','info3','info4'), array ('var1','info1','info4'),); Et tu accédes aux différents sous-tableaux par $tab[0], $tab[1], $tab[2]. Pour boucler sur les sous-tableaux (que tu appelles lignes) contenant 'var1', tu peux faire: foreach($tab as $key=>$value) { if(in_array("var1", $value)) { // Le tableau $value contient var1 // Tu fais ton truc ici }}
lorik Posté 17 Juin 2005 Auteur Posté 17 Juin 2005 Merci Weweb, Comme tu as pu le constater, je découvre la programmation, et je ne suis pas sur d'avoir tout compris à ton script, mais au moins je sais comment creuser la question. A+ et merci encore
WewEB Posté 17 Juin 2005 Posté 17 Juin 2005 En fait, ce qu'il convient de préciser, c'est que lorsque tu déclares un tableau en PHP en donnant directement des valeurs, l'interpréteur se charge de donner des clés et ceci de manière incrémentale (si ça se dit... ). En gros, il prend la première valeur, lui colle l'index 1, prend la deuxiéme valeur, lui colle l'index 2... Ainsi, le code suivant: $tab=array(array ('var1',' info1', 'info2'),array ('var2','info3','info4'),array ('var1','info1','info4'),); Peut très bien s'écrire de la façon suivante: $tab=array(0 => array ('var1',' info1', 'info2'),1 => array ('var2','info3','info4'),3 => array ('var1','info1','info4'),); Dans la deuxiéme partie du script, j'utilise une boucle foreach (voir la doc) pour parcourir tout le tableau $tab et pouvoir intervenir sur chaque paire clé/valeur. A chaque itération, je vérifie si le tableau $value (car ici, chaque valeur de $tab est un tableau à part entière) contient une valeur var1, ceci grace à la fonction in_array (là encore, voir la doc). Voilà, n'hésite pas à demander des détails sur certaines parties si elles ne sont pas claires.
lorik Posté 18 Juin 2005 Auteur Posté 18 Juin 2005 Bonjour, bon, cette fois, je touche au but, avec un tableu 'propre'. Merci Weweb foreach($tab as $key=>$value) { if(in_array("var1", $value)) { // Le tableau $value contient var1echo $tab[$key][2]; // j'accède bien à mes valeurs, en joutant ($key]. }} Mais ceci dit, mon tableau fait +/- 500 lignes. Je crains que ce soit un peu 'lourd' (et long, mon script doit tourner très rapidement) de boucler sur chaque ligne pour vérifier la condition. Je reviens à ma question initiale, comment extraire directement les lignes contenant "var1' ? Je pourrais alors directement travailler sur les valeurs qui m'interessent. Par avance merci.
WewEB Posté 18 Juin 2005 Posté 18 Juin 2005 Difficile ici d'extraire directement dans la mesure où ce que tu cherches toi c'est: $tab[$key][0] = "var1"; Ceci, en faisant varier $key. Donc moi, je sais pas Attendons voir si Dan ou quelqu'un d'autre a une solution.
Anonymus Posté 19 Juin 2005 Posté 19 Juin 2005 Idem, il faut bien tester toutes les valeurs de ton tableau pour savoir laquelle correspond à la condition en question (ici, '$key'). De plus, 500 lignes pour un tableau, ce n'est pas trop dur à gérer pour php, il saura le faire sans trop trainer.
lorik Posté 20 Juin 2005 Auteur Posté 20 Juin 2005 Merci Weweb, tu as déja fais beaucoup ! Attendons donc que Saint Dan (ou un autre saint, je suis pas sectaire !) fasse descendre la lumière !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant