In PHP wird die Funktion MB_SUBSTR_COUNT verwendet, um die Anzahl zu berechnen, die ein anderes Substring in einer Zeichenfolge erscheint. Diese Funktion ist Teil einer Multibyte-String-Erweiterung (Mbstring), die speziell verwendet wird, um Zeichenfolgen zu verarbeiten, die Multibyte-Zeichen wie UTF-8-Codierung enthalten. Im Gegensatz zu Substr_Count kann MB_SUBSTR_COUNT die Anzahl der Zeichen bei der Verarbeitung von Multibyte -Zeichen korrekt berechnen.
Wenn wir jedoch MB_SUBSTR_COUNT verwenden und eine leere Zeichenfolge als Parameter übergeben, welches Ergebnis wird zurückgegeben? In diesem Artikel wird das Verhalten der Funktion MB_SUBSTR_COUNT bei der Begegnung einer leeren Zeichenfolge analysiert und einige Vorsichtsmaßnahmen vorgesehen.
Der Funktionsprototyp von mb_substr_count lautet wie folgt:
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">mb_substr_count</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">string</span></span><span> </span><span><span class="hljs-variable">$needle</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>);
</span></span>
$ haystack : Die durchsuchte Zielzeichenfolge.
$ nadel : Das Substring, nach dem in der Zielzeichenfolge gesucht werden muss.
$ codierung : Optionaler Parameter, Zeichencodierung angeben. Die interne Zeichenkodierung wird standardmäßig verwendet.
Diese Funktion gibt die Häufigkeit zurück. ** $ Nadel erscheint in $ haystack **.
Angenommen, wir übergeben eine leere Zeichenfolge als Substring (d. H. $ nadel ) an die Funktion MB_SUBSTR_COUNT gemäß der PHP -Dokumentation. Der Rückgabewert ist die Anzahl der Vorkommen des in der Zielzeichenfolge enthaltenen Substring .
<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">""</span></span><span>;
</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr_count</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">$count</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe:0</span></span><span>
</span></span>
Im obigen Code ist $ nadel eine leere Zeichenfolge. Obwohl die Zielzeichenfolge $ Haystack nicht leer ist, behandelt PHP die leere Zeichenfolge als "Substring, das nicht erschienen ist". Daher gibt die Funktion 0 zurück.
Wenn die Zielzeichenfolge $ Haystack an MB_SUBSTR_COUNT übergeben wird (d. H. $ haystack = "" ), beträgt der Rückgabewert 0, unabhängig von $ nadel . Da eine leere Zeichenfolge unabhängig vom Substring kein Substring enthalten kann.
<span><span><span class="hljs-variable">$haystack</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-variable">$needle</span></span><span> = </span><span><span class="hljs-string">"Hello"</span></span><span>;
</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr_count</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">$count</span></span><span>; </span><span><span class="hljs-comment">// Ausgabe:0</span></span><span>
</span></span>
Obwohl $ nadel "Hallo" ist, enthält der leere String $ Haystack nichts, sodass er 0 zurückgibt.
Aus den beiden oben genannten Beispielen ist ersichtlich, dass sich MB_SUBSTR_COUNT intuitiv mit leeren Zeichenfolgen verhält:
Wenn das Substring leer ist , geben Sie 0 zurück, da kein Substring übereinstimmt werden kann.
Wenn die Zielzeichenfolge leer ist , wird 0 zurückgegeben, da die leere Zeichenfolge keine Substrings enthalten kann.
Diese beiden Situationen sind in der Funktion MB_SUBSTR_COUNT relativ häufige "Grenzsituationen", und Sie müssen darauf achten, wenn Sie sie verwenden.
Obwohl das Verhalten leerer Zeichenfolgen in den meisten Fällen nicht problematisch ist, wird empfohlen, leere Zeichenfolgen als Parameter an mb_substr_count zur Verbesserung der Code -Lesbarkeit und -Effizienz zu vermeiden. Wenn $ nadle eine leere Zeichenfolge ist, wird empfohlen, vor dem Aufrufen von MB_SUBSTR_COUNT beispielsweise eine einfache Überprüfung durchzuführen:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$needle</span></span><span> !== </span><span><span class="hljs-string">""</span></span><span>) {
</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr_count</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">else</span></span><span> {
</span><span><span class="hljs-variable">$count</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
}
</span></span>
Dies kann unnötige Funktionsaufrufe reduzieren und die Programmleistung verbessern.
Leere Zeichenfolge als Nadel : MB_SUBSTR_COUNT gibt 0 zurück, wenn das Substring leer ist.
Leere Zeichenfolge als Haystack : MB_SUBSTR_COUNT gibt auch 0 zurück, wenn die Zielzeichenfolge leer ist.
Leistungsoptimierung : Vermeiden Sie es, leere Zeichenfolgen als Nadel zu übergeben, und dann kann das Aufrufen von MB_SUBSTR_COUNT nach der Überprüfung die Effizienz verbessern.
Das Verständnis dieser Details kann den Entwicklern dabei helfen, beim Schreiben von PHP -Code mb_substr_count besser zu verwenden und unnötige Fehler und Leistungsprobleme zu vermeiden.