Recuperer liste de mot utilisé dans une chaine
mariostar27
Messages postés
391
Date d'inscription
Statut
Membre
Dernière intervention
-
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche un algorithme PHP qui me permettrais d'obtenir une liste de mot utilisé dans une chaine et me les retourner sous forme de tableaux.
Je m'explique par un exemple :
Voila l'idée c'est d'avoir un algorithme qui me permettrais de trouver les array $aWordUsed1 et $aWordUsed2 en fonction des chaine de caractères $sString1 et $sString2.
Merci d'avance ^^.
gwennael
Je cherche un algorithme PHP qui me permettrais d'obtenir une liste de mot utilisé dans une chaine et me les retourner sous forme de tableaux.
Je m'explique par un exemple :
$aWord = array('poste', 'type', 'duree', 'situation familiale');
$sString1 = "poste développeur type CDD duree 3 ans situation familiale mariée";
$aWordUsed1 = array('poste', 'type', 'duree', 'situation familiale');
$sString2 = "poste ingenieur poste PDG type CDD duree 3 ans duree 6 ans";
$aWordUsed2 = array('poste', 'poste', 'type', 'duree', 'duree');
Voila l'idée c'est d'avoir un algorithme qui me permettrais de trouver les array $aWordUsed1 et $aWordUsed2 en fonction des chaine de caractères $sString1 et $sString2.
Merci d'avance ^^.
gwennael
A voir également:
- Recuperer liste de mot utilisé dans une chaine
- Liste déroulante excel - Guide
- Trousseau mot de passe iphone - Guide
- Recuperer message whatsapp supprimé - Guide
- Mot de passe - Guide
- Mot de passe administrateur - Guide
3 réponses
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
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
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.