Dans PHP, la fonction STRPOS est utilisée pour trouver l'emplacement de la première sous-chaîne dans une chaîne. La syntaxe de base de cette fonction est la suivante:
<span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
Lorsque $ Haystack est la chaîne cible, $ Needle est la sous-chaîne à trouver, et $ offset est un paramètre de décalage facultatif, indiquant où démarrer la recherche.
Normalement, STRPOS renvoie l'indice de l'emplacement de la sous-chaîne (comptant à partir de 0). Si la sous-chaîne n'est pas trouvée, false est renvoyé.
Tout d'abord, il est important de comprendre le comportement normal des fonctions STRPOS . Lorsqu'aucun décalage ( $ offset ) n'est passé, la fonction commence à regarder le début de la chaîne. Considérez l'exemple suivant:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"world"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>; </span><span><span class="hljs-comment">// Sortir 7</span></span><span>
</span></span>
Dans cet exemple, STRPOS Renvoie 7 , où "Monde" apparaît pour la première fois dans "Hello, World!".
Le troisième paramètre de la fonction STRPOS $ offset est facultatif. Il nous permet de spécifier où démarrer la recherche dans la chaîne cible. Par exemple:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"o"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>; </span><span><span class="hljs-comment">// Sortir 8</span></span><span>
</span></span>
Dans cet exemple, STRPOS commence à rechercher l'indice 5, il renvoie donc la position du deuxième "O" dans "World", c'est-à-dire 8.
Lorsque nous passons un nombre négatif comme le paramètre $ offset , la fonction STRPOS attend vers l'avant à partir de la fin de la chaîne cible. Plus précisément, un décalage de nombre négatif indique un décalage de la fin de la chaîne, et la valeur absolue du nombre négatif est le nombre de caractères comptés à partir de la fin.
Par exemple:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"o"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, -</span><span><span class="hljs-number">6</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>; </span><span><span class="hljs-comment">// Sortir 8</span></span><span>
</span></span>
Dans cet exemple, -6 signifie 6 caractères de la fin de la chaîne (après le caractère "!"), C'est-à-dire que la recherche commence à partir de la position du "monde!". STRPOS a trouvé l'emplacement de "O" et a retourné 8.
Regardons un autre exemple pour comprendre le principe de travail des compensations négatives:
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">"abcdef"</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"c"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>, -</span><span><span class="hljs-number">2</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$position</span></span><span>; </span><span><span class="hljs-comment">// Sortir 2</span></span><span>
</span></span>
Dans cet exemple, le décalage -2 signifie attendre à partir de l'avant-dernier caractère "E" de la chaîne "ABCDEF". La fonction STRPOS commence par "E" et recherche la sous-chaîne "C". Puisque "C" renvoie 2 comme deuxième position lors du comptage de l'avant de l'avant-dernier caractère.
Bien que l'utilisation de décalages négatifs soit très flexible, il y a plusieurs points clés auxquels nous devons toujours faire attention:
Le décalage ne peut pas être excessivement négatif : si la valeur absolue du nombre négatif est supérieure à la longueur de la chaîne cible, STRPOS consultera la position de début de la chaîne. Par exemple, si vous passez -20 comme décalage et que la chaîne cible n'a que 10 caractères, STRPOS sera équivalent à la recherche de la position de départ.
Le résultat peut ne pas être comme prévu : les décalages négatifs rendent la recherche relativement compliquée. Dans le développement réel, si la longueur de la chaîne ou le point de départ de la recherche n'est pas déterminée, cela peut conduire à des résultats incorrects. Par conséquent, les développeurs doivent s'assurer de comprendre la relation entre le décalage et la longueur de chaîne cible.
La fonction STRPOS de PHP attend avec impatience la fin de la chaîne lors du passage d'un décalage négatif, ce qui offre plus de flexibilité. Mais en même temps, soyez prudent lorsque vous utilisez des décalages négatifs pour vous assurer que la valeur absolue du décalage ne dépasse pas la longueur de la chaîne. Comprendre cela peut aider les développeurs à contrôler plus précisément les opérations de recherche et à éviter les erreurs inutiles.