Dans PHP, StripOs () est une fonction très courante qui est utilisée pour trouver une autre sous-chaîne en cas d'insensible à une seule chaîne. Bien que l'utilisation de base de cette fonction soit très simple, son troisième paramètre, $ offset , est souvent ignoré ou mal utilisé.
Cet article introduira en détail le rôle du paramètre $ offset , les scénarios d'utilisation et comment l'utiliser pour optimiser l'efficacité de la recherche de chaînes.
La syntaxe est la suivante:
int|false stripos(string $haystack, string $needle, int $offset = 0)
$ Haystack : la chaîne à rechercher.
$ aiguille : la sous-chaîne à trouver.
$ offset (facultatif): l'emplacement pour démarrer la recherche.
Valeur de retour: si elle est trouvée, renvoyez la première position d'occurrence (à partir de 0); Si cela n'est pas trouvé, retournez faux .
Remarque: stripos () est sensible à la casse, tandis que StrPOS () est sensible à la casse.
$ Offset Spécifie par où commencer à chercher des sous-chaînes, qui commence à partir du début de la chaîne (c'est-à-dire la position 0).
Ceci est particulièrement utile dans les scénarios suivants:
Par exemple, supposons que nous voulons trouver un mot-clé qui apparaît la deuxième fois à partir d'un paragraphe de texte:
$text = "Bienvenue à visiter m66.net,Notre site Web est https://m66.net/page。";
$firstPos = stripos($text, "m66.net");
if ($firstPos !== false) {
// Commencez à chercher la deuxième fois après la première apparition
$secondPos = stripos($text, "m66.net", $firstPos + 1);
echo "La deuxième fois qu'il apparaît est:$secondPos";
}
Sortir:
La deuxième fois qu'il apparaît est:22
En définissant $ offset = $ firstpos + 1, nous évitons les correspondances en double qui apparaissent d'abord.
Lorsque vous recherchez plusieurs sous-chaînes identiques dans certaines chaînes longues, vous pouvez combiner des boucles et $ offset pour "Recherches paginées":
$content = "Cliquez sur le lien https://m66.net/a,Cliquez à nouveau https://m66.net/b,Dernière visite https://m66.net/c";
$needle = "https://m66.net/";
$offset = 0;
while (($pos = stripos($content, $needle, $offset)) !== false) {
echo "Trouvez l'emplacement:$pos\n";
$offset = $pos + strlen($needle); // Continuez à rechercher plus tard
}
Sortir:
Trouvez l'emplacement:6
Trouvez l'emplacement:26
Trouvez l'emplacement:47
Cette méthode est particulièrement adaptée au positionnement de plusieurs mots clés identiques dans l'analyse des données, le traitement du texte et l'analyse des journaux.
Lorsque vous savez déjà qu'une certaine partie du texte n'est pas pertinente, ou que vous n'êtes intéressé que par la seconde moitié, l'utilisation de $ offset peut considérablement améliorer les performances et éviter les tentatives de correspondance inutiles, en particulier lorsqu'il s'agit de longues chaînes:
$largeText = file_get_contents('large_text.txt');
$offset = strpos($largeText, 'Démarrer le texte');
if ($offset !== false) {
$startSearchFrom = $offset + strlen('Démarrer le texte');
$pos = stripos($largeText, 'Mots clés', $startSearchFrom);
echo "Mots clés出现的位置:$pos";
}
Par rapport à la recherche à partir de zéro, sauter des recherches qui sont des zones non liées sont plus efficaces et économiques des ressources.
Débit négatif : bien que des valeurs négatives puissent être utilisées, elles conduiront à un comportement inattendu dans la plupart des scénarios. À moins que vous ne compreniez vraiment le but, il n'est pas recommandé de l'utiliser comme ça.
Ignorer $ offset provoque des correspondances en double : si vous avez besoin de trouver plusieurs occurrences de cibles, assurez-vous de définir $ offset , sinon il reviendra toujours à l'emplacement de la première occurrence.
Le paramètre $ offset dans la fonction stripos () est une fonctionnalité puissante mais souvent négligée. L'utilisation de $ offset peut rationnellement rendre votre code plus efficace et plus flexible. Qu'il s'agisse de sous-chaînes qui apparaissent plusieurs fois ou de sauter du contenu traité, $ offset est utile.
La prochaine fois que vous rédigerez une logique liée à la recherche, vous pourriez tout aussi bien vous arrêter et y penser: devrais-je ajouter $ offset?