Aller au contenu

recherche dans un tableau


lorik

Sujets conseillés

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... :wub:

Merci par avance de votre aide.

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

Re.

Dan, puisque tu as l'air en forme je corse un peu le problème :D

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

Lien vers le commentaire
Partager sur d’autres sites

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é).

Lien vers le commentaire
Partager sur d’autres sites

Bon, ça marche super, donc je complique encore :D

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 :whistling: )

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... :wacko:

Par avance merci.

Lien vers le commentaire
Partager sur d’autres sites

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é par WewEB
Lien vers le commentaire
Partager sur d’autres sites

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' ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
}
}

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

bon, cette fois, je touche au but, avec un tableu 'propre'. Merci Weweb :D

foreach($tab as $key=>$value)
{
if(in_array("var1", $value))
 {
 // Le tableau $value contient var1
echo $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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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. ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...