[RESOLU] preg_match: Rechercher dans un tableau

Mammouth du PHP | 725 Messages

31 mai 2013, 04:31

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

Mammouth du PHP | 619 Messages

31 mai 2013, 07:43

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

}
}

Mammouth du PHP | 725 Messages

01 juin 2013, 01:41

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

Mammouth du PHP | 619 Messages

01 juin 2013, 08:52

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

Mammouth du PHP | 725 Messages

01 juin 2013, 09:32

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

Mammouth du PHP | 619 Messages

01 juin 2013, 10:19

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

Mammouth du PHP | 725 Messages

03 juin 2013, 03:35

je veux trouver le mot pomme-de-terre aussi

Mammouth du PHP | 619 Messages

03 juin 2013, 09:59

ok faut modifier un peu la regex et utilise preg_match_all

Mammouth du PHP | 619 Messages

03 juin 2013, 10:09

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

?>
 

Mammouth du PHP | 725 Messages

06 juin 2013, 02:23

merci ghost5922 je vais l'essayer

Mammouth du PHP | 725 Messages

06 juin 2013, 02:33

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

Mammouth du PHP | 619 Messages

06 juin 2013, 07:41

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"

Mammouth du PHP | 725 Messages

07 juin 2013, 04:23

merci ghost5922