recherche de données dans un tableau

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 17:53

Bonjour,
j'ai un petit problème que je n'arrive pas à résoudre, c'est le suivant:

j'ai un tableau que j'ai récupérer d'un fichier xml:


Array ( [0] => Array ( [NOM] => rochefort [PRENOM] => jean [CIVILITE] => M. [DATEDENAISSANCE] => JJ
[1] => Array ( [NOM] => canet [PRENOM] => guillaume [CIVILITE] => M. [DATEDENAISSANCE] => H )


Il s'agit d'un tableau multidimensionnel, et c'est à partir de là que ça se complique, je voudrais récuperer la ligne (plus précisément la clé de cette dernière) qui contient un nom précis, par exemple:
récuperer la clé de la ligne qui contient rochefort.

Mon code est le suivant:

$nomrecherche="rochefort";
foreach($personne as $cle => $nomrecherche){
if($personne[$cle]['NOM']==$nomrecherche){
echo key($personne);}
}

je n'ai pas de message d'erreur, je pense etre pas loin de la solution mais ma condition if ne filtre rien du tout!!!

Si qqun pouvait m'éclairer...
Merci d'avance.

Julie.

Mammouth du PHP | 19672 Messages

27 nov. 2006, 17:59

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Débuter en PHP".

Merci de prendre le temps de lire les règlements.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

27 nov. 2006, 18:04

salut,
tu est certe pas très loins de la solution, mais tu mélange tout de même quelque petites choses:
voici le code commenté:
// initialisation de la variable de recherche
$nomrecherche="rochefort";

//on parcours le tableau ligne par ligne, en récupérant également la clé (qui correspond à la ligne)
foreach($personne as $cle => $valeur){
  if($valeur[NOM]==$nomrecherche){
    echo "Le mot ".$nomrecherche." a été trouvé à la ligne (l'entrée): ".$cle;
  }
} 
est-ce que tu comprends les erreurs que tu à faites ?
Edit le post de Ryle m'a fait voir une erreu qui est corrigée...
Modifié en dernier par jojolapine le 27 nov. 2006, 18:14, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 nov. 2006, 18:10

Il y a juste un petit soucis dans ton foreach().

foreach($personne as $cle => $nomrecherche)
signifie
Pour chaque élément du tableau $presonne, j'affecte la clé dans $cle et la valeur dans $nomrecherche (ce qui en l'occurence écrase le nom que tu recherche). Il faudrait donc dans un premier temps changer le nom de cette variable.

Ceci étant fait, tu vas obtenir à chaque itération $cle égal à 0, puis 1, etc. et $valeur (si c'est ainsi que tu as nommé la valeur associée à la clé) qui va correspondre à "Array ( [NOM] => rochefort [PRENOM] => jean [CIVILITE] => M. [DATEDENAISSANCE] => JJ)" puis "Array ( [NOM] => canet [PRENOM] => guillaume [CIVILITE] => M. [DATEDENAISSANCE] => H )", etc.

C'est donc dans ce tableau $valeur qu'il te faut aller chercher ton nom et le comparer au $nomrecherche du début. S'ils correspondent, $cle contient la ligne à laquelle tu as trouvé le résultat. Tu peux l'afficher, la stocker ou bien sortir de la boucle avec un "break" pour qu'elle ne soit plus modifiée :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 18:35

J'ai pigé mes erreurs..... merci bcp
mais il y a tout de même un petit "hic"! c'est que l'affichage ne fonctionne pas...
si j'enlève un égal dans le if, il y a affichage de $nomrecherche et $cle, (affichage répété à chaque clé)
Le mot rochefort a été trouvé à la ligne (l'entrée): 1
Le mot rochefort a été trouvé à la ligne (l'entrée): 2....

il y a donc un petit pb dans le if et je ne vois pas ce qui cloche...

ViPHP
ViPHP | 3607 Messages

27 nov. 2006, 18:40

Attention, l'opérateur "=" est un opérateur d'assignation,
exemple:
$a=2;
à ce moment là $a prend la valeur
Pour faire des tests, on utilise "==" ou "===" la différence entre les deux est le deuxième test la valeur comme le premier, mais également le type...

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 18:52

même si je rajoute un = en plus ça ne fonctionne le if...

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 18:53

même si je rajoute un = en plus ça ne fonctionne pas le if...
(j'avais oublié le "pas"!)

ViPHP
ViPHP | 3607 Messages

27 nov. 2006, 18:59

montre donc le code que tu essaye?

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 19:02

<?php

session_start();

//adresse du fichier
$path2 = "./base_de_cv";
$extension= "_.xml";
$file="candidats".$extension;
$filename2=$path2."/".$file;

$handle = fopen ($filename2, "r");
$contenu = fread ($handle, filesize ($filename2));
fclose ($handle);



$p = xml_parser_create();
xml_parse_into_struct($p, $contenu, $vals, $index);
xml_parser_free($p);

$countVals= count($vals);
for ($i = 0; $i < $countVals; $i++){
if ($vals[$i]['tag'] == 'CANDIDAT' && $vals[$i]['type'] == 'open'){
while (!($vals[$i]['tag'] == 'CANDIDAT' && $vals[$i]['type'] == 'close')){
if ($vals[$i]['tag'] != 'CANDIDAT' && $vals[$i]['type'] == 'complete'){
$tmp[$vals[$i]['tag']] = $vals[$i]['value'];
}
$i++;
}
$sortie[] = $tmp;
$jo=sizeof($sortie);
}
}

//print_r($sortie);
//echo $sortie;

//recherche de la ligne ou se trouve $_POST['nom']
$nomrecherche=$_POST['nom'];
foreach($sortie as $cle => $valeur){
if($valeur['NOM']==$nomrecherche){
echo "Le mot ".$nomrecherche." a été trouvé à la ligne (l'entrée): ".$cle;
}
}
?>

ViPHP
ViPHP | 3607 Messages

27 nov. 2006, 19:12

quand tu dis que ça ne fonctionne pas, quel est le message d'erreur?

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 19:15

le pb est qu'il n'y a pas de message d'erreur!
pour essayer de faire afficher qqch, il faut enlever le if...
j'ai l'imprssion que le if ne fait rien du tout

y aurait il une autre façon "simple" pour retourner ce que je veux?

ViPHP
fab
ViPHP | 2657 Messages

27 nov. 2006, 19:20

Au passage il y a des balises
 pour poster le code ainsi il sera en couleur et la compréhension n'en sera que plus aisée
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

ViPHP
ViPHP | 3607 Messages

27 nov. 2006, 19:20

essaye de mettre ceci dans ton code après le traitement du fichier:
print('<pre>');
print_r($sortie);
print('</pre>');
et donne nous le résultat

Invité
Invité n'ayant pas de compte PHPfrance

27 nov. 2006, 19:35

Code : Tout sélectionner

Array ( [0] => Array ( [NOM] => rochefort [PRENOM] => jean ... [1] => Array ( [NOM] => canet [PRENOM] => guillaume
le code que tu viens de me donner s'affiche correctement...