La recherche textuelle avec PHP s'effectue avec plusieurs fonctions : strpos, strstr et preg_match. Cette dernière fonction utilise les expressions régulières. Le manuel PHP indique qu'elle est déconseillée pour des recherches simples car elle est plus lente.
Protocole
Un tableau de données est créé avant les mesures de temps. Il contient 10 000 lignes d'une chaîne aléatoire de 512 caractères hexadécimaux.
Les mesures de temps sont effectuées selon le schéma suivant :
création du tableau de données;
mesure du temps 1;
recherche avec la fonction strpos;
mesure du temps 2;
recherche avec la fonction strstr;
mesure du temps 3;
recherche avec la fonction preg_replace;
mesure du temps 4;
Chaque test est effectué 100 fois pour lisser les mesures et amoindrir l'impact des autres activités aléatoires de la machine.
Tests
1er test : recherche d'une chaîne introuvable
On recherche ici une chaîne qui n'est pas présente dans le tableau de données.
La fonction preg_match se révèle 3 fois plus lente pour une recherche simple que les 2 autres fonctions. Les résultats des fonctions strpos et strstr sont équivalents.
2ème test : recherche d'une chaîne trouvable
On recherche ici une chaîne qui est présente dans chaque ligne du tableau de données.
La fonction preg_match se révèle 3 fois plus lente pour une recherche simple que les 2 autres fonctions.
La fonction strpos est 25% plus rapide que strstr. La différence peut s'expliquer par le retour des fonctions. La fonction strpos retourne un entier indiquant la position de la chaîne trouvée alors que la fonction strstr retourne une chaîne de caractères à partir de l'emplacement de la chaîne recherchée.
Conclusions
La fonction preg_match permettant l'utilisation des expressions régulières est toujours plus longue et ceci même dans le cas d'une recherche simple.
Les fonctions strpos et strstr sont équivalentes mais la fonction strstr peut se révéler plus lente car elle retourne une chaîne de caractères.
Le type de valeur de retour désiré doit donc être étudié selon les cas pour choisir la fonction la plus performante.