Bonjour all !
Je cherche à améliorer un micro algo de rien du tout dont je me sers actuellement. Parce qu'il comporte 2 boucles et dès que les chaîne sont trop longue, ça capote ^^
Voici la fonction :
Ici le compteur retourne 3 par exemple, et c'est parfait et logique ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 $sentence = "06 00 52 44 10 96 85"; $keyWords = array('06', '96', '12','44'); fonc($sentence, $keyWords); function fonc($sentence, $keyWords) { // On split la phrase en mots. $wordsOfSentence = multiexplode(array(" ", "'"), $sentence); // On initialise les mots clefs (motifs) formant le pattern à chercher dans chaque phrase. $tableOfKeyWords = $keyWords; $counter = 0; // Pour chaque mot de la phrase. foreach ($wordsOfSentence as $value1) { // Pour chaque mot clef. foreach ($tableOfKeyWords as $value2) { // Si ces deux mots sont égaux. if (preg_match('/' . $value2 . '/i', $value1)) { // On incrémente le compteur. $counter++; } } } echo $counter . '<br/>'; }
On m'avait bien proposé ça :
Mais ça implique que le motif recherché doit être rigoureusement le même que l'un des mot de la chaîne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (count(array_intersect(explode(' ', $string), $tabKey)) >= 3) { // ... }
Or je voudrais que mon algo marche aussi sur cette exemple :
Que ici cela repère également le 06 même si dans la chaîne il est sous la forme de 0678.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $sentence = "0678 00 52 44 10 96 85"; $keyWords = array('06', '96', '12','44');
J'espère avoir été clair ^^ c'est dur à expliquer
Merci d'avance !
Partager