Page 1 sur 1

preg_match: Rechercher dans un tableau

Posté : 31 mai 2013, 04:31
par rimie
Bonjour,

J'ai un tableau des fruits, et je voudrais rechercher, en utilisant preg_match, le terme 'pommes' par exemple, alors que dans mon tableau il y a 'pomme':
$fruits = array('pomme', 'fraise', 'kiwi');
merci

Re: preg_match: Rechercher dans un tableau

Posté : 31 mai 2013, 07:43
par ghost5922
Bonjour,

2 solutions

1premier

tu peu faire un implode pour tous mettre dans une chaine se qui donnerai
$var='|0_pomme|1_fraise|2_kiwi|';

puis dans ta regex tu récupéré le numéro de la key du tableau + la valeur si tu veux juste vérifie la presente pas besoin de la key puis une regex
if(preg_match('#pomme[s]"#isU',$var,$matches)){

}
ou un foreach pour tester chaque valeur
foreach($array as $valeur){
if(preg_match('#pomme[s]"#isU',$var,$matches)){

}
}

Re: preg_match: Rechercher dans un tableau

Posté : 01 juin 2013, 01:41
par rimie
j'ai deja essaye cette methode (la 2eme):
// exemple de phrase
$contenu = 'Je mange des fruits, comme la banane, les pommes et des kiwis ...'; // j'aurais 2 resultats (pomme et kiwis)

// a chercher
$fruits = array('pomme', 'fraise', 'kiwi');

foreach($fruits as $k)
        {
            if(preg_match('#'.$k.'#i', $contenu))
            {
                $e = 'Le mot "'.$k.'" a ete trouve.';
                return true;
            }
            return false;
        } // end foreach
dans ce cas, si j'ai plusieurs resultats, j'aurais:

Le mot "x" a ete trouve
Le mot "y" a ete trouve
Le mot "z" a ete trouve
etc

peut on avoir un resultat comme (disant 2 resultats ont ete trouve):
// exemple de phrase
$contenu = 'Je mange des fruits, comme la banane, les pommes et des kiwis ...'; // j'aurais 2 resultats (pomme et kiwis)

// a chercher
$fruits = array('pomme', 'fraise', 'kiwi');

foreach($fruits as $k)
        {
            if(preg_match('#'.$k.'#i', $contenu))
            {
                $e = '"'.$k.'" ==> 'ICI sont equivalent de recherche dans le contenu';
                return true;
            }
            return false;
        } // end foreach
2 resultats trouves:

pomme ==> pommes
kiwi ===> kiwis

Re: preg_match: Rechercher dans un tableau

Posté : 01 juin 2013, 08:52
par ghost5922
Bonjour,
<?php

// exemple de phrase
$contenu = 'Je mange des fruits, comme la banane, les pommes et des kiwis ...'; // j'aurais 2 resultats (pomme et kiwis)

// a chercher
$fruits = array('pomme', 'fraise', 'kiwi');
$i=0;
$mot='';
foreach($fruits as $k){
	if(preg_match('#'.$k.'[s]#i', $contenu,$smatch)){
	   $i++;
	   $mot.=$k." ==> ".$smatch[0]."<br />";
	}
} 
if($i>=1){ 
	$mot=substr($mot,0,-2);
	echo $i." resultats trouves:<br /><br />".$mot;
	
}
else{
	echo'Aucun mot trouve';
}

?>
affichera

2 resultats trouves:

pomme ==> pommes
kiwi ==> kiwis

Re: preg_match: Rechercher dans un tableau

Posté : 01 juin 2013, 09:32
par rimie
merci ghost5922, je pense que le [s] est possible d'etre changeable:

pommes ==> pomme
kiwis ==> kiwi
pomme-de-terre ==> pomme

le dernier cas est possible, si on cherche pomme, on peut trouver pomme-de-terre dans notre contenu, alors comment faire pour l'afficher telle qu'elle est dans le contenu?

Merci

Re: preg_match: Rechercher dans un tableau

Posté : 01 juin 2013, 10:19
par ghost5922
Re,

tu veux pourvoir le trouve ou justement ne pas le trouve ?

car avec le code dessus je ne retrouve pas pomme dans pomme-de-terre ou alors tu le tape pomme de terre

Re: preg_match: Rechercher dans un tableau

Posté : 03 juin 2013, 03:35
par rimie
je veux trouver le mot pomme-de-terre aussi

Re: preg_match: Rechercher dans un tableau

Posté : 03 juin 2013, 09:59
par ghost5922
ok faut modifier un peu la regex et utilise preg_match_all

Re: preg_match: Rechercher dans un tableau

Posté : 03 juin 2013, 10:09
par ghost5922
Re,

test quelque chose comme
<?php

// exemple de phrase
$contenu = 'Je mange des fruits, comme la banane, les pommes et des kiwis pomme-de-terre ...'; // j'aurais 2 resultats (pomme et kiwis)

// a chercher
$fruits = array('pomme', 'fraise', 'kiwi');
$i=0;
$mot='';
foreach($fruits as $k){
        if(preg_match_all('#'.$k.'(s|[a-z-]+)#i', $contenu,$smatch)){
			foreach($smatch[0] as $value){
		   		if(isset($value) and !empty($value)){$i++;$mot.=$k." ==> ".$value."<br />";}	
			}
		  
        }
} 
if($i>=1){ 
        $mot=substr($mot,0,-2);
        echo $i." resultats trouves:<br /><br />".$mot;
        
}
else{
        echo'Aucun mot trouve';
}

?>
 

Re: preg_match: Rechercher dans un tableau

Posté : 06 juin 2013, 02:23
par rimie
merci ghost5922 je vais l'essayer

Re: preg_match: Rechercher dans un tableau

Posté : 06 juin 2013, 02:33
par rimie
c'est quoi la difference entre preg_match et preg_match_all?

qu'est ce que ca veut dire cette regex: s|[a-z-]

merci

Re: preg_match: Rechercher dans un tableau

Posté : 06 juin 2013, 07:41
par ghost5922
all va rechercher plusieurs resulat

s|[a-z-] veux dire qui peux il avoir dernier un S ou suivie d'autre lettre et tirer

apres pour plus d'infos regarde sur google il a beaucoup de tuto qui explique "php regex"

Re: preg_match: Rechercher dans un tableau

Posté : 07 juin 2013, 04:23
par rimie
merci ghost5922