In PHP sind STRCSPN () und strstr () zwei sehr praktische String -Verarbeitungsfunktionen. STRCSPN () wird verwendet, um die Position des ersten Zeichens in einer Zeichenfolge zu berechnen, die nicht mit dem angegebenen Zeichensatz übereinstimmt, der von Anfang an auftritt, während Strcspn () verwendet wird, um das erste Auftreten einer Zeichenfolge in einer anderen Zeichenfolge zu finden. Diese beiden Funktionen müssen in einigen Fällen zusammen verwendet werden, können jedoch auf einige häufige Probleme stoßen, wenn sie in Kombination verwendet werden. Dieser Artikel wird diese Probleme analysieren und Lösungen bereitstellen.
Strcspn () :
STRCSPN (String $ Haystack, String $ charlist): int
Diese Funktion berechnet und gibt die erste Zeichenposition in $ haystack zurück, die keinem Charakter in $ charlist entspricht, das von Anfang an auftritt. Wenn kein Matching -Zeichen gefunden wird, wird die Länge der gesamten Zeichenfolge zurückgegeben.
strstr () :
Smstr (String $ Haystack, String $ Nadel, bool $ vor_needle = false): String | false
Diese Funktion gibt die Position in der $ haystack -Zeichenfolge zurück, in der das Substring $ Nadel zum ersten Mal angezeigt wird. Wenn der Parameter $ vor_Needle auf TRUE eingestellt ist, gibt das Teil das Teil zurück, bevor $ Nadel angezeigt wird.
Viele Entwickler können bei Verwendung dieser beiden Funktionen zusammen verwirrende Auftragsprobleme erleben. Da Strcspn () eine Position zurückgibt, wird Strest () normalerweise verwendet, um Substrings aus einer Position auf einer Zeichenfolge zu finden. Wenn dies versehentlich umgekehrt aufgerufen wird, kann dies dazu führen, dass die erforderliche Saitenposition nicht ordnungsgemäß gefunden wird.
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">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>); </span><span><span class="hljs-comment">// Finden Sie den Standort des ersten Nichtkomma- oder Ausrufezeichens</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</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-comment">// Finden "World" Ist es da? $haystack Mitte</span></span><span>
</span></span>
Diese Methode sucht nicht nach Substrings basierend auf der von STRCSPN () erhaltenen Position. strstr () wird immer vom Beginn der Saite nachsehen.
Bevor Sie Strstr () verwenden, können Sie die richtige Ausgangsposition über strcspn () berechnen und dann Substr () verwenden, um das Substring von $ haystack abzufangen, um den richtigen Suchbereich sicherzustellen.
<span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$position</span></span><span>); </span><span><span class="hljs-comment">// Holen Sie sich das Substring von diesem Ort aus</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$substring</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>); </span><span><span class="hljs-comment">// 在子字符串MitteFinden "World"</span></span><span>
</span></span>
STRCSPN () gibt die Länge der Zeichenfolge zurück, wenn kein angegebener Zeichensatz gefunden wird, während Strcspn () false zurückgibt, wenn kein Zielsubstring gefunden wird. Wenn zusammen verwendet wird, kann die Ausnahme des Rückgabewerts nicht berücksichtigt werden, sie kann Programmfehler oder unklare Logik verursachen.
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">"PHP"</span></span><span>;
</span><span><span class="hljs-variable">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</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-comment">// Nicht gefunden "PHP",zurückkehren false</span></span><span>
</span></span>
Im obigen Code gibt Strstr () false zurück, weil "PHP" nicht in $ haystack ist. Der Entwickler kann jedoch nicht mit False umgehen, was zu einem nachfolgenden Operationsversagen führt.
Überprüfen Sie vor der Verwendung von SmStr () , ob das Substring erfolgreich gefunden werden kann.
<span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</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">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Substring nicht gefunden!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Substring gefunden:"</span></span><span> . </span><span><span class="hljs-variable">$result</span></span><span>;
}
</span></span>
STRCSPN () und STRSTR () sind beide String -Manipulationsfunktionen, die die Leistung beeinflussen können, wenn sie häufig eine große Datenmenge auffordert. Insbesondere in Schleifen können wiederholte Berechnungen von STRCSPN () und str () zu unnötigen Wiederholungen führen, insbesondere wenn mehrere Substrings oder Zeichensätze erforderlich sind, um mehrmals nachzuschlagen.
Lösung :
Verarbeiten Sie die Zielzeichenfolge vor der Schleife und vermeiden Sie wiederholte Anrufe in jeder Iteration.
<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">$charlist</span></span><span> = </span><span><span class="hljs-string">",!"</span></span><span>;
</span><span><span class="hljs-variable">$position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strcspn</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$charlist</span></span><span>);
</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$haystack</span></span><span>, </span><span><span class="hljs-variable">$position</span></span><span>);
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strstr</span></span><span>(</span><span><span class="hljs-variable">$substring</span></span><span>, </span><span><span class="hljs-variable">$needle</span></span><span>);
</span><span><span class="hljs-comment">// Weitere Operationen</span></span><span>
</span></span>
Unnötig wiederholte Suchvorgänge können vermieden werden, indem die Position zunächst berechnet und die zu verarbeitenden Substrings extrahiert werden.
Bei der Verwendung von Strcspn () und strst () in PHP konzentrierten sich die häufigen Probleme hauptsächlich auf die Reihenfolge der Funktionsaufrufe, die Verarbeitung von Rückgabewerten und die Leistungsoptimierung. Das Verständnis der Rückgabewerte dieser beiden Funktionen und die durchführende Durchführung von Fehlerprüfungen kann vernünftigerweise effektiv vermieden werden. Darüber hinaus ist es auch von entscheidender Bedeutung, große Datenmengen effizient zu verarbeiten, eine angemessene Vorverarbeitung und Vermeidung wiederholter Berechnungen.
Durch die Einführung dieses Artikels hoffe ich, dass jeder diese beiden Funktionen in der tatsächlichen Entwicklung besser nutzen kann, um die Stabilität und Effizienz des Codes zu verbessern.