Dans PHP, la fonction MB_substr_count est utilisée pour calculer le nombre de fois qu'une autre sous-chaîne apparaît dans une chaîne. Cette fonction fait partie d'une extension de chaîne multi -yte (MBSTring) qui est spécifiquement utilisée pour traiter les chaînes contenant des caractères multi -yte tels que le codage UTF-8. Contrairement à substr_count , mb_substr_count peut calculer correctement le nombre de caractères lors du traitement des caractères multipyte.
Cependant, lorsque nous utilisons MB_SUBSTR_COUNT et que nous passons une chaîne vide comme paramètre, quel résultat sera renvoyé? Cet article analysera le comportement de la fonction MB_substr_count lors de la rencontre d'une chaîne vide et fournit quelques précautions.
Le prototype de fonction de mb_substr_count est le suivant:
<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 : la chaîne cible recherchée.
$ aiguille : la sous-chaîne à rechercher dans la chaîne cible.
$ Encodage : paramètre facultatif, spécifiez le codage des caractères. Le codage de caractères interne est utilisé par défaut.
Cette fonction renvoie le nombre de fois ** $ l'aiguille apparaît dans $ haystack **.
Supposons que nous passons une chaîne vide en tant que sous-chaîne (c'est-à-dire $ aiguille ) à la fonction MB_SUBSTR_COUNT , selon la documentation PHP, la valeur de retour sera le nombre d'occurrences de la sous-chaîne contenue dans la chaîne cible .
<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">// Sortir:0</span></span><span>
</span></span>
Dans le code ci-dessus, $ l'aiguille est une chaîne vide. Bien que la chaîne cible $ Haystack ne soit pas vide, PHP traite la chaîne vide comme une "sous-chaîne qui n'est pas apparue". Par conséquent, la fonction renvoie 0.
Si la chaîne cible $ Haystack transmise à mb_substr_count est une chaîne vide (c'est-à-dire $ haystack = "" ), la valeur de retour sera 0 quelle que soit $ aigule . Parce qu'une chaîne vide ne peut contenir aucune sous-chaîne, quelle que soit la sous-chaîne.
<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">// Sortir:0</span></span><span>
</span></span>
Ici, bien que $ aigule soit "bonjour", la chaîne vide $ Haystack ne contient rien, donc il renvoie 0.
D'après les deux exemples ci-dessus, on peut voir que mb_substr_count se comporte intuitivement avec des chaînes vides:
Si la sous-chaîne est vide , retournez 0 car aucune sous-chaîne ne peut être appariée.
Si la chaîne cible est vide , 0 est renvoyée car la chaîne vide ne peut contenir aucune sous-chaîne.
Ces deux situations sont des "situations limites" relativement courantes dans la fonction MB_SUBSTR_COUNT , et vous devez y faire attention lorsque vous l'utilisez.
Bien que le comportement des chaînes vides ne soit pas problématique dans la plupart des cas, il est recommandé d'éviter de passer des chaînes vides en tant que paramètres à MB_Substr_count pour améliorer la lisibilité et l'efficacité du code. Si $ aigule est une chaîne vide, il est recommandé de faire une vérification simple avant d'appeler MB_substr_count , par exemple:
<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>
Cela peut réduire les appels de fonction inutiles et améliorer les performances du programme.
String vide en tant qu'aiguille : MB_SUBSTR_COUNT RETOURS 0 Lorsque la sous-chaîne est vide.
String vide comme Haystack : MB_substr_count renvoie également 0 lorsque la chaîne cible est vide.
Optimisation des performances : Évitez de passer des chaînes vides comme aiguille , puis appelez MB_SUBSTR_COUNT après la vérification peut améliorer l'efficacité.
Comprendre ces détails peut aider les développeurs à mieux utiliser MB_SUBSTR_COUNT lors de l'écriture de code PHP, en évitant les erreurs et les problèmes de performances inutiles.