Aller au contenu

recherche dans un tableau


Sujets conseillés

Posté

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.

Posté

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

Posté

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

Posté

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

Posté

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.

Posté (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é par WewEB
Posté

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

Posté

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

Posté

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

Posté

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

Posté

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.

Posté

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.

Posté

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.

Posté

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

Posté

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 !

Veuillez vous connecter pour commenter

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



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