Aktueller Standort: Startseite> Neueste Artikel> Was passiert, wenn Sie negative Argumente übergeben, wenn Sie die PHP -Strpos -Funktion verwenden? Eingehende Analyse seines Verhaltens

Was passiert, wenn Sie negative Argumente übergeben, wenn Sie die PHP -Strpos -Funktion verwenden? Eingehende Analyse seines Verhaltens

gitbox 2025-07-17

In PHP wird die STRPOS -Funktion verwendet, um den Ort des ersten Substrings in einer Zeichenfolge zu ermitteln. Die grundlegende Syntax dieser Funktion lautet wie folgt:

 <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>

Wenn $ haystack die Zielzeichenfolge ist, ist $ nadel das zu findene Substring, und $ offset ist ein optionaler Offset -Parameter, der angibt, wo die Suche gestartet wird.

Normalerweise gibt Strpos den Index zurück, wo das Substring zuerst erscheint (Zählung von 0). Wenn das Substring nicht gefunden wird, wird Falsch zurückgegeben.

Normales Verhalten von PHP -Strpos

Erstens ist es wichtig, das normale Verhalten von Strpos -Funktionen zu verstehen. Wenn kein Offset ( $ offset ) übergeben wird, beginnt die Funktion den Beginn der Zeichenfolge zu betrachten. Betrachten Sie das folgende Beispiel:

 <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">// Ausgabe 7</span></span><span>
</span></span>

In diesem Beispiel gibt Strpos 7 zurück, wo "Welt" zuerst in "Hallo, Welt!" Erscheint.

Die Funktion des Parameters $ offset

Der dritte Parameter der StrPOS -Funktion $ Offset ist optional. Dadurch können wir angeben, wo die Suche in der Zielzeichenfolge gestartet werden soll. Zum Beispiel:

 <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">// Ausgabe 8</span></span><span>
</span></span>

In diesem Beispiel schaut Strpos aus dem Index 5, so dass es die Position des zweiten "O" in "Welt" zurückgibt, d. H. 8.

Verhalten beim Übergeben einer negativen Zahl an den Parameter $ offset

Wenn wir eine negative Zahl als Parameter $ offset übergeben, freut sich die StrPOS -Funktion vom Ende der Zielzeichenfolge nach vorne. Insbesondere gibt ein negativer Zahlversatz einen Offset vom Ende der Zeichenfolge an, und der Absolutwert der negativen Zahl ist die Anzahl der vom Ende gezählten Zeichen.

Zum Beispiel:

 <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">// Ausgabe 8</span></span><span>
</span></span>

In diesem Beispiel bedeutet -6 6 Zeichen vom Ende der Zeichenfolge (nach dem "!" -Charakter), das heißt, die Suche beginnt von der Position von "World!". Strpos fand den Ort von "o" und kehrte 8 zurück.

Der Analyseprozess der negativen Zahl $ Offset

Schauen wir uns ein anderes Beispiel an, um das Arbeitsprinzip negativer Offsets zu verstehen:

 <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">// Ausgabe 2</span></span><span>
</span></span>

In diesem Beispiel bedeutet der Offset -2 , sich vom vorletzten Charakter "E" der Zeichenfolge "Abcdef" zu freuen. Die STRPOS -Funktion beginnt mit "E" und sucht nach dem Substring "C". Da "C" 2 als zweite Position zurückgibt, wenn sie vom vorletzten Charakter vorwärts zählen.

Dinge zu beachten

Obwohl die Verwendung negativer Offsets sehr flexibel ist, gibt es mehrere wichtige Punkte, auf die wir noch achten müssen:

  1. Der Offset kann nicht übermäßig negativ sein : Wenn der absolute Wert der negativen Zahl größer ist als die Länge der Zielzeichenfolge, schaut Strpos aus der Startposition der Zeichenfolge nach. Wenn Sie beispielsweise als Offset -20 bestehen und die Zielzeichenfolge nur 10 Zeichen hat, entspricht STRPOs von der Startposition nach oben.

  2. Das Ergebnis ist möglicherweise nicht wie erwartet : Negative Offsets machen die Suche relativ kompliziert. Wenn die Länge der Zeichenfolge oder der Ausgangspunkt der Suche nicht bestimmt wird, kann dies zu falschen Ergebnissen führen. Daher sollten Entwickler sicherstellen, dass die Beziehung zwischen dem Offset und der Zielstringlänge versteht.

Zusammenfassen

Die STRPOS -Funktion von PHP freut sich vom Ende der Zeichenfolge beim Übergeben eines negativen Versatzes, was mehr Flexibilität bietet. Achten Sie gleichzeitig vorsichtig, wenn Sie negative Offsets verwenden, um sicherzustellen, dass der absolute Wert des Offset die Länge der Zeichenfolge nicht überschreitet. Wenn Sie dies verstehen, können Entwickler die Suchvorgänge genauer kontrollieren und unnötige Fehler vermeiden.