Recuperer liste de mot utilisé dans une chaine
Fermé
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
-
Modifié par mariostar27 le 22/01/2014 à 13:47
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 22 janv. 2014 à 16:50
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 22 janv. 2014 à 16:50
A voir également:
- Recuperer liste de mot utilisé dans une chaine
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Trousseau mot de passe iphone - Guide
- Comment récupérer un compte yahoo sans mot de passe - Guide
- Voir mot de passe wifi android - Guide
3 réponses
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
526
22 janv. 2014 à 14:30
22 janv. 2014 à 14:30
Salut,
Voici deux exemples de fonction (la deuxième correspond mieux à ce que tu attends : elle retourne toutes les occurrences trouvé dans la chaine et pas seulement la première) :
Bonne journée
Voici deux exemples de fonction (la deuxième correspond mieux à ce que tu attends : elle retourne toutes les occurrences trouvé dans la chaine et pas seulement la première) :
function findWords($subject, $searches) { $foundedWords = array(); foreach ($searches as $wordSearch) { if (strpos($subject, $wordSearch) !== FALSE) { $foundedWords[] = $wordSearch; } } return $foundedWords; } function findWords2($subject, $searches) { $foundedWords = array(); foreach ($searches as $wordSearch) { $offsetFound = strpos($subject, $wordSearch); while ($offsetFound !== FALSE) { $foundedWords[] = $wordSearch; $offsetFound = strpos($subject, $wordSearch, $offsetFound + strlen($wordSearch)); } } return $foundedWords; } $aWord = array('poste', 'type', 'duree', 'situation familiale'); $sString1 = "poste développeur type CDD duree 3 ans situation familiale mariée"; $sString2 = "poste ingenieur poste PDG type CDD duree 3 ans duree 6 ans"; var_dump(findWords($sString1, $aWord)); // array('poste', 'type', 'duree', 'situation familiale') var_dump(findWords($sString2, $aWord)); // array('poste', 'type', 'duree'); var_dump(findWords2($sString1, $aWord)); // array('poste', 'type', 'duree', 'situation familiale') var_dump(findWords2($sString2, $aWord)); // array('poste', 'poste', 'type', 'duree', 'duree');
Bonne journée
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
Modifié par mariostar27 le 22/01/2014 à 15:10
Modifié par mariostar27 le 22/01/2014 à 15:10
J'ai un problème pour ton cas. Pour :
ta fonction
findWords2() me retourne ceci :
Alors que je voudrais ceci :
Encore merci pour ton aide en tout cas ^^
gwennael
$sString2 = "poste ingenieur poste PDG type CDD duree 3 ans duree 6 ans poste test";
ta fonction
findWords2() me retourne ceci :
array (size=6) 0 => string 'poste' (length=5) 1 => string 'poste' (length=5) 2 => string 'poste' (length=5) 3 => string 'type' (length=4) 4 => string 'duree' (length=5) 5 => string 'duree' (length=5)
Alors que je voudrais ceci :
array (size=6) 0 => string 'poste' (length=5) 1 => string 'poste' (length=5) 2 => string 'type' (length=4) 3 => string 'duree' (length=5) 4 => string 'duree' (length=5) 5 => string 'poste' (length=5)
Encore merci pour ton aide en tout cas ^^
gwennael
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
526
22 janv. 2014 à 16:50
22 janv. 2014 à 16:50
Voici la première solution que j'avais commencé à coder :
Celle-ci est beaucoup plus simple et correspond au résultat attendu de ton dernier cas, mais elle ne permet pas de chercher plusieurs mots ensemble tel que "situation familiale" -> le cas pour $sString1 ne fonctionne donc pas. Avec cette fonction, il faudrait chercher séparément les mots "situation" et "familiale".
Sinon voici un autre exemple qui devrait correspondre à tes différents cas :
Néanmoins cette fonction est moins élégante car beaucoup plus complexe et moins optimisée.
A toi de choisir et d'adapter celle qui te convient.
function findWords3($subject, $searches) { $foundedWords = array(); $wordsSubject = explode(' ', $subject); foreach ($wordsSubject as $word) { if (in_array($word, $searches)) { $foundedWords[] = $word; } } return $foundedWords; }
Celle-ci est beaucoup plus simple et correspond au résultat attendu de ton dernier cas, mais elle ne permet pas de chercher plusieurs mots ensemble tel que "situation familiale" -> le cas pour $sString1 ne fonctionne donc pas. Avec cette fonction, il faudrait chercher séparément les mots "situation" et "familiale".
Sinon voici un autre exemple qui devrait correspondre à tes différents cas :
function findWords4($subject, $searches) { $foundedWords = array(); $subjectLenght = strlen($subject); $offsetStart = 0; $i = 0; while ($offsetStart + $i < $subjectLenght) { $i++; $subjectPart = substr($subject, $offsetStart, $i); foreach ($searches as $wordSearch) { if (strpos($subjectPart, $wordSearch) !== FALSE) { $foundedWords[] = $wordSearch; $offsetStart = $offsetStart + $i; $i = 0; } } } return $foundedWords; }
Néanmoins cette fonction est moins élégante car beaucoup plus complexe et moins optimisée.
A toi de choisir et d'adapter celle qui te convient.