Bonjour,
alors voilà j'aimerais repérer certains motifs, ou du moins la présence de certains motifs dans une chaîne. J'ai donc logiquement pensé à :
Mais j'ai un petit problème d'algo ou alors de compétences vis à vis de cette commande.
Code : Sélectionner tout - Visualiser dans une fenêtre à part preg_match_all()
En fait je voudrais vérifier si 3 au moins des éléments du tableau $tabKey se trouve bien (dans leur ordre d'apparition dans le tableau) dans la chaîne $string.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $string = "06 00 52 44 10 96 85"; $tabKey = array('06', '52', '44', '46', '40', '10', '85');
En gros la chaine "06 44 85" devrait passer.
Pour l'instant j'ai codé qqch du genre :
Mais cela oblige la présence de TOUS les éléments du tableau $tabKey.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function constructPattern($tabKey) { $pattern = '/'; foreach ($tabKey as $keyWords) { $pattern .= '([^\.?!)]*)' . preg_quote($keyWords, '/') . '([^\.)]*)'; } $pattern .= '/i'; return $pattern; }
J'ai donc fais ceci :
Mais là encore, ça construit le tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $sizeOfTable = count($tabKey); if ($sizeOfTable >= $sizeOfSequence) { for ($i = 0; $i <= $sizeOfTable - 3; $i++) { $newTabKey = array(); for ($j = 0; $j < 3; $j++) { array_push($newTabKey, $tabKey[$i + $j]); } array_push($newTabKeyTotal, $newTabKey); } }
Mais du coup ça ne vérifie pas les pattern ['06', '52', '40'] ou bien encore ['06', '46', '85'].
Code : Sélectionner tout - Visualiser dans une fenêtre à part ['06', '52', '44'] ; ['52', '44' '46'] ; ['44' '46','40'] ; ['46','40','10'] ; ['40','10','85']
En espérant m'être fait comprendre ^^ En gros je voudrais que seulement 3 des nombres de ce tableau soit nécessaire pour que la chaîne passe le pattern, les autres étant facultatif.
Merci d'avance !
Partager