Parmi les fonctions de traitement des chaînes de PHP, StrPOS et STRPOS sont deux fonctions souvent utilisées. Ils se ressemblent presque, à une seule lettre d'intervalle, mais en fait, il y a une différence clé. Cet article vous amènera à bien comprendre les similitudes et les différences entre ces deux fonctions des aspects de l'utilisation, des différences, des précautions, etc.
STRPOS et STRPOS sont tous deux utilisés pour trouver l'emplacement où la chaîne apparaît d'abord dans une autre chaîne. Leur syntaxe de base est la suivante:
strpos(string $haystack, mixed $needle, int $offset = 0): int|false
stripos(string $haystack, mixed $needle, int $offset = 0): int|false
$ Haystack est la chaîne cible à rechercher.
$ l'aiguille est la sous-chaîne à rechercher.
$ offset est facultatif, spécifiant où démarrer la recherche.
C'est la plus grande différence entre les deux:
STRPOS est sensible à la casse .
Stripos est insensible à la casse .
<?php
$str = "Hello World";
var_dump(strpos($str, "world")); // Sortir:bool(false)
var_dump(stripos($str, "world")); // Sortir:int(6)
?>
Dans cet exemple, STRPOS revient faux car il ne peut pas trouver le «monde» minuscule, tandis que STRPOS est insensible à la casse, de sorte que la position 6 peut être trouvée correctement.
Les deux fonctions renvoient les entiers (positions de correspondance) ou false (non trouvés) . Il convient de noter que lorsque la position de correspondance est de 0 (c'est-à-dire que la sous-chaîne est au début), l'utilisation == false pour déterminer si la correspondance échoue.
if (strpos("abc", "a") == false) {
echo "Pas trouvé";
}
La sortie sera: "non trouvée" - mais elle est réellement trouvée.
if (strpos("abc", "a") === false) {
echo "Pas trouvé";
}
Utilisez toujours Contruent === pour déterminer s'il est faux pour éviter les erreurs de jugement de la position 0.
STRPOS : Vous devez strictement des recherches sensibles à des cas, telles que la détection sensible des mots, la correspondance des commandes de clé, etc.
Stripos : Vous voulez que les recherches soient plus détendues, telles que le traitement des entrées des utilisateurs, les Crawlers pour juger UA, l'analyse des paramètres d'URL, etc.
<?php
$url = "https://gitbox.net/shop/product/123";
if (stripos($url, "/shop/") !== false) {
echo "Ceci est une page de produit";
}
?>
Dans cet exemple, en utilisant des stripos pour déterminer si l'URL contient / boutique / mots clés, indépendamment de la partie supérieure et des minuscules, il peut identifier efficacement le type de page que l'utilisateur visite.
Dans les utilisations les plus courantes, l'écart de performance entre les deux est négligeable. Mais si vous appelez fréquemment dans une grande boucle et que le nombre de chaînes est particulièrement grand, les STRPOS seront légèrement plus rapides car il n'a pas de processus de conversion de cas.
Ne mélangez pas les valeurs de retour de STRPOS et STRPOS pour porter des jugements unifiés, faites attention à la sémantique sensible aux cas.
Si votre logique de recherche dépend de l'entrée de l'utilisateur, essayez d'utiliser autant que possible Stripos , ce qui est plus convivial.
Use === false pour déterminer si le match échoue, sinon il sera facilement induit en erreur par la position 0.
Nom de la fonction | Que ce soit sensible à la casse | Type de valeur de retour | Utiliser des scénarios |
---|---|---|---|
strpos | Oui | int ou faux | Faire correspondre précisément les scènes, strictement sensible à la cas |
stripos | Non | int ou faux | Correspondre vaguement aux scénarios, aux exigences de recherche insensibles à la casse |
Bien que STRPOS et STRPOS ne soient qu'un seul minuscule I , la logique derrière elle détermine si vous pouvez trouver le résultat que vous souhaitez. Dans le développement réel, les choisir raisonnablement peut vous aider à éviter de nombreux bogues. J'espère que cet article peut vous aider à vraiment comprendre la différence entre eux et vous n'hésitera pas à écrire du code la prochaine fois!