Eine leere Zeichenfolge ist eine spezielle Zeichenfolge mit einer Länge von 0. Beim Vergleich von zwei Zeichenfolgen unter Verwendung von STRNCMP kann das Vorhandensein einer leeren Zeichenfolge die Ergebnisse des Vergleichs beeinflussen, insbesondere in den folgenden Situationen:
Eine Zeichenfolge ist leer <br> Wenn STRNCMP verwendet wird, um eine leere Zeichenfolge mit anderen nicht leeren Zeichenfolgen zu vergleichen, ist der Rückgabewert normalerweise eine negative Zahl (da leere Zeichenfolgen als kleiner als alle nicht leeren Zeichenfolgen in der Wörterbuchreihenfolge angesehen werden). Zum Beispiel:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-string">'hello'</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>); </span><span><span class="hljs-comment">// Das Ergebnis wird negativ sein</span></span><span>
</span></span>Wenn eine Saite leer ist, müssen wir überlegen, wie wir mit dieser Situation richtig umgehen sollen.
Vergleich von zwei leeren Saiten <br> Wenn beide Saiten leere Saiten sind, wird STRNCMP 0 zurückkehren, da sie in der Wörterbuchreihenfolge gleich sind.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>); </span><span><span class="hljs-comment">// sich herausstellen 0</span></span><span>
</span></span> Die angegebene Länge beträgt 0 während des Vergleichs
Wenn die angegebene Vergleichslänge 0 beträgt, vergleichen STRNCMP die "ersten 0 Zeichen" der beiden Zeichenfolgen. Auch wenn die eingehende Zeichenfolge eine leere Zeichenfolge ist, berücksichtigt STRNCMP die beiden leeren Zeichenfolgen gleich und gibt 0 zurück.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-string">'abc'</span></span><span>, </span><span><span class="hljs-string">'def'</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>); </span><span><span class="hljs-comment">// sich herausstellen 0</span></span><span>
</span></span>Dies erfordert in einigen besonderen Umständen besondere Aufmerksamkeit.
Um potenzielle Probleme zu vermeiden, die durch leere Zeichenfolgen verursacht werden, können wir die folgenden Strategien anwenden:
Überprüfen Sie die leere Zeichenfolge <br> Überprüfen Sie vor dem String -Vergleich zunächst, ob die Zeichenfolge leer ist. Wenn die Zeichenfolge leer ist, können Sie sich entscheiden, einen Standardwert basierend auf der Geschäftslogik zurückzugeben oder den Vergleich direkt zu überspringen. Zum Beispiel:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>) || </span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$str2</span></span><span>)) {
</span><span><span class="hljs-comment">// Spezielle Logik für den Umgang mit leeren Saiten</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Einer der Saiten ist leer\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</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">$result</span></span><span>;
}
</span></span>Setzen Sie den Standardwert <br> Wenn die Zeichenfolge leer ist, können Sie der leeren Zeichenfolge einen Standardwert zuweisen, bevor Sie einen Vergleich anstellen, um Interferenzen aus der leeren Zeichenfolge zu vermeiden. Zum Beispiel:
<span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-variable">$str1</span></span><span> ?: </span><span><span class="hljs-string">'default'</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-variable">$str2</span></span><span> ?: </span><span><span class="hljs-string">'default'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span></span>In diesem Beispiel wird $ str1 oder $ str2 leer, sie werden durch die Zeichenfolge "Standard" ersetzt und dann verglichen.
Wählen Sie vernünftigerweise die Vergleichslänge <br> Versuchen Sie beim Vergleich von Strings in der tatsächlichen Entwicklung die entsprechende Vergleichslänge. Wenn die angegebene Länge zu klein ist, kann der Vergleich frühzeitig beendet werden, was zu ungenauen Vergleichsergebnissen führt. Insbesondere bei leeren Saiten oder teilweise leeren Zeichenfolgen ist es mehr notwendig, die entsprechende Länge basierend auf den tatsächlichen Bedürfnissen zu bestimmen.
Verwenden Sie die Strlen -Funktion, um unnötige Vergleiche zu vermeiden . <br> Manchmal kümmern wir uns nur um den tatsächlichen Inhalt der Zeichenfolge, ohne einen Vergleich der gesamten Zeichenfolge durchführen zu müssen. Zu diesem Zeitpunkt können Sie zuerst die Länge der Zeichenfolge überprüfen und dann entscheiden, ob Sie vergleichen sind:
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span> && </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$str2</span></span><span>) > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strncmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</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">$result</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">"Einer der Saiten ist leer,Vergleich überspringen。\n"</span></span><span>;
}
</span></span>