retrouver mot en php avec expression reguliere

retrouver mot en php avec expression reguliere - PHP - Programmation

Marsh Posté le 12-05-2010 à 15:03:20    

Bonjour  voila j'ai un fichier texte ou plutôt une variable contenant le texte ci dessous j'aimerai pourvoir faire des recherche dans ce texte par exemple si je tape "n" que j'ai tout  les valeurs commençant par "n" ainsi que leur numero de telephone  
 
il faudrait donc que j'arrive a extraire le(s) mot(s) que je cherche  
[{"value":"nom","id":"numtel"},{"value":"nom2","id":"num tel"}etc... ]
 
Merci de votre aide

Reply

Marsh Posté le 12-05-2010 à 15:03:20   

Reply

Marsh Posté le 12-05-2010 à 15:10:23    

c'est du json ca, pas besoin de regexp un array_filter (ou walk) suffira


Message édité par stealth35 le 12-05-2010 à 15:15:03
Reply

Marsh Posté le 12-05-2010 à 15:16:43    

oui c'est du json tu peut m'en dire plus sur array_filter et walk  s'il te plait
 
[edit] j'ai essayer avec array_filter mais il me met comme erreur que ce n'est pas un tableau


Message édité par cyrildu07 le 12-05-2010 à 15:25:08
Reply

Marsh Posté le 12-05-2010 à 15:26:02    

normal faut faire un coup de json_decode

Reply

Marsh Posté le 12-05-2010 à 15:35:40    

sinon avec juste une boucle

 
Code :
  1. $str = '[{"value":"nom","id":"numtel"},{"value":"nom2","id":"num tel"},{"value":"pat","id":"num tel"}]';
  2. $data     = json_decode($str);
  3. $search  = 'p';    
  4.     
  5. foreach($data as $key => $item)
  6. {
  7.     if($item->value[0] !== $search)
  8.     {
  9.         unset($data[$key]);
  10.     }
  11. }
  12.         
  13. print_r($data);


Message édité par stealth35 le 12-05-2010 à 15:37:12
Reply

Marsh Posté le 12-05-2010 à 15:37:57    

merci de prendre du temps pour répondre
dans la doc pour le json_decode il parle de recursion pour le troisieme paramètre faut mettre quoi ?
 
[edit] j'ai opter pour le tableau finalment mais l'encodage ne se fait pas tout a fait bien :
  la dessous le array  
Array ( [1] => stdClass Object ( [value] => allez [id] => num tel ) )  
 
ensuite apres encodage :
 
{"1":{"value":"allez","id":"num tel"}}
 
il me faudrait obtenir ca :  
 
[{"value":"allez","id":"num tel"}]


Message édité par cyrildu07 le 12-05-2010 à 15:51:47
Reply

Marsh Posté le 12-05-2010 à 15:52:19    

pas besoin dans prendre compte, sinon en regexp ca donnerais un truc du genre :

 
Code :
  1. $str     = '[{"value":"nom","id":"numtel"},{"value":"nom2","id":"num tel"},{"value":"pat","id":"num tel"}]';
  2. preg_match_all('/({"\w+":"(n[\w\s]+)","\w+":"([\w\s]+)"})/ui', $str, $matches, PREG_SET_ORDER);    
  3. print_r($matches);

Message cité 1 fois
Message édité par stealth35 le 12-05-2010 à 15:52:25
Reply

Marsh Posté le 12-05-2010 à 15:59:28    

stealth35 a écrit :

pas besoin dans prendre compte, sinon en regexp ca donnerais un truc du genre :
 

Code :
  1. $str     = '[{"value":"nom","id":"numtel"},{"value":"nom2","id":"num tel"},{"value":"pat","id":"num tel"}]';
  2. preg_match_all('/({"\w+":"(n[\w\s]+)","\w+":"([\w\s]+)"})/ui', $str, $matches, PREG_SET_ORDER);    
  3. print_r($matches);



 
 
juste est-ce que tu peut m'aider pour le json-encode pourquoi est-ce que ce n'est pas tout a fait sous la bonne forme ?

Reply

Marsh Posté le 12-05-2010 à 16:06:01    

ta pas besoin de json_encode, mais de json_decode, je t'ai mis l'exemple plus haut

Reply

Marsh Posté le 12-05-2010 à 16:10:13    

stealth35 a écrit :

ta pas besoin de json_encode, mais de json_decode, je t'ai mis l'exemple plus haut


 
 
avec le code que tu m'a mis j'obtient ca soit un tableau
 
 Array ( [0] => stdClass Object ( [value] => perdu [id] => numtel ) [2] => stdClass Object ( [value] => pat [id] => num tel ) )  
 
sauf que voila je ne peut rien faire avec ca il me le faut sous cette forme mais avec les resultats  

[{"value":"allez","id":"num tel"}{"agence":"dsfsfef"},{"agence":"zefezfezzf"},]  

 
c'est pour ca que je fesait un encode pour remettre le resultat sous la bonne forme

Reply

Marsh Posté le 12-05-2010 à 16:10:13   

Reply

Marsh Posté le 12-05-2010 à 16:15:31    

je vois
 

Code :
  1. echo json_encode(array_values($data));

Reply

Marsh Posté le 12-05-2010 à 16:18:43    

super ca marche seul dernier souci enfin j'espere si je met plus de deux lettre ca ne m'affiche rien pourquoi je doit pouvoir taper le mot entier

Reply

Marsh Posté le 12-05-2010 à 16:24:06    

dans la condition tu fais

Code :
  1. if(strpos($item->value, $search) !== 0)

Reply

Marsh Posté le 12-05-2010 à 16:32:57    

eh bien tu m'a sauver je sais je suis chiant mais je ne met pas de lettre et aussi pour qu'il ne fasse pas la difference en majuscule et minuscule j'ai une erreur une solution sinon tant pis tu m'a bien aidé et je t'en remercie


Message édité par cyrildu07 le 12-05-2010 à 16:39:56
Reply

Marsh Posté le 12-05-2010 à 16:41:52    

avec stripos pour les majuscule, pour le reste, tu fais un condition pour éviter le foreach

Message cité 1 fois
Message édité par stealth35 le 12-05-2010 à 16:43:24
Reply

Marsh Posté le 12-05-2010 à 16:44:38    

stealth35 a écrit :

avec stripos pour les majuscule, pour le reste, tu fais un condition pour éviter le foreach


 
 
dernier truc apres je t'embête plus dans le cas ou je ne veut pas mettre de lettre ??

Reply

Marsh Posté le 12-05-2010 à 16:52:44    

je t'ai dis tu fais une condition pour eviter le foreach

Reply

Marsh Posté le 12-05-2010 à 16:57:15    

stealth35 a écrit :

je t'ai dis tu fais une condition pour eviter le foreach


 
desolé j'avais pas lu plus loin  :sweat:  et sinon si je veux etendre ma recherche au numer de tel doit-je recopier tout le code ? une deuxiem fois ou y'a une possibilité sur le même code

Reply

Marsh Posté le 12-05-2010 à 17:05:55    

pareil tu rajoutes une condition avec un ||

Reply

Marsh Posté le 12-05-2010 à 17:12:52    

Un truc du genre :  

Code :
  1. foreach($data as $key => $item)
  2.    {
  3.    
  4.    if(stripos($item->value, $search || $item->id,search ) !== 0)
  5.     {
  6.      unset($data[$key]);
  7.     }
  8.    }
  9.   
  10.    echo json_encode(array_values($data)

)
 
mais marche pas j'ai le droit a ca :

stripos() expects parameter 3 to be long, string given in

Reply

Marsh Posté le 12-05-2010 à 17:19:03    

normale ta mis la condition dans les parametre, en gros faut faire 2 stripos

Reply

Marsh Posté le 12-05-2010 à 17:21:40    

alors comme  ca mais ca ne fonctionne pas non plus  
 
if(stripos($item->value, $search) !== 0  || stripos($item->id, $search)!== 0)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed