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 :
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/>';
}
Ici le compteur retourne 3 par exemple, et c'est parfait et logique ^^

On m'avait bien proposé ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
if (count(array_intersect(explode(' ', $string), $tabKey)) >= 3) {
    // ...
}
Mais ça implique que le motif recherché doit être rigoureusement le même que l'un des mot de la chaîne.

Or je voudrais que mon algo marche aussi sur cette exemple :
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');
Que ici cela repère également le 06 même si dans la chaîne il est sous la forme de 0678.

J'espère avoir été clair ^^ c'est dur à expliquer
Merci d'avance !