Position actuelle: Accueil> Derniers articles> Analyse des performances de la fonction STRCHR dans PHP: Quels scénarios s'appliquent?

Analyse des performances de la fonction STRCHR dans PHP: Quels scénarios s'appliquent?

gitbox 2025-06-04

1. Introduction à la fonction strchr ()

strchr () est une fonction de chaîne en php. Sa fonction est de trouver l'emplacement où un caractère apparaît pour la première fois dans une chaîne et de tout retourner du début de ce caractère à la fin de la chaîne. Son alias est STRSTR () , et les deux sont presque exactement les mêmes en fonction.

Prototype de fonction:

 string strchr(string $haystack, mixed $needle, bool $before_needle = false)
  • $ Haystack : la chaîne d'origine à rechercher.

  • $ aiguille : le caractère à rechercher (ne peut être qu'un seul caractère, s'il s'agit d'une chaîne, seul le premier caractère est pris).

  • $ before_needle (facultatif): s'il faut tout retourner avant l'aiguille (par défaut est faux).

2. Analyse des performances

Parmi les fonctions principales de PHP, StrCHR () est une fonction de traitement légère de chaîne, et ses performances sont généralement supérieures, mais il existe des restrictions d'utilisation.

1. Complexité du temps

Le mécanisme central de StrCHR () est de scanner la chaîne de gauche à droite pour trouver le premier caractère correspondant, avec une complexité temporelle de O (n) , où n est la longueur de la chaîne. Ses performances sont acceptables pour la plupart des chaînes courtes ou des chaînes de longueur moyenne.

2. Comparez avec substr () + strPos ()

Dans de nombreux scénarios, substr () peut être utilisé avec STRPOS () pour obtenir des effets similaires. Par exemple:

 $url = "https://www.gitbox.net/page";
$fragment = substr($url, strpos($url, '/page'));

Équivalent à:

 $fragment = strchr($url, '/p');

Du point de vue des performances:

  • StrChr () est plus concis, mais ne peut fonctionner qu'à partir du niveau du caractère.

  • substr () + strPos () est plus flexible et peut gérer les sous-chaînes de chaînes, mais est légèrement plus compliquée.

3. Comparaison des tests de performance (schéma)

Ce qui suit est un test de comparaison simple, qui prend 100 000 fois pour trouver un caractère dans la même chaîne:

 $start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    strchr("https://www.gitbox.net/example", '/e');
}
$end = microtime(true);
echo "strchr prend du temps: " . ($end - $start) . " Deuxième";

Les mesures réelles montrent que sur les petites et moyennes chaînes, les performances STRCHR () sont meilleures que la méthode de combinaison, mais la différence n'est pas grande. La lisibilité et l'adaptabilité des scènes doivent être prises en compte dans les choix réels.

3. Analyse de scénario applicable

1. Extraire un chemin spécifique à l'URL

Lorsque nous extractons les informations de chemin de l'URL complète, StrCHR () peut rapidement extraire la partie première / Start Path.

 $url = "https://www.gitbox.net/api/data";
$path = strchr($url, '/a'); // Sortir: /api/data

2. Déterminez le nom de domaine de l'adresse e-mail

Vous pouvez utiliser StrCHR () pour obtenir rapidement la partie du nom de domaine de l'e-mail:

 $email = "[email protected]";
$domain = strchr($email, '@'); // Sortir: @gitbox.net

Si vous devez supprimer @ , vous pouvez utiliser substr () :

 $domain = substr(strchr($email, '@'), 1); // Sortir: gitbox.net

3. Combiné avec un contexte booléen pour déterminer si un personnage existe

Lorsque la valeur de retour de strchr () est une véritable valeur dans le contexte booléen, cela signifie que le personnage existe:

 if (strchr("gitbox.net/docs", '/d')) {
    echo "Le chemin de l&#39;existence /d";
}

4. Extraire le préfixe de substring (en utilisant le paramètre avant_NeEDLE)

Après PHP 5.3, le paramètre avant_NEEDLE est pris en charge:

 $str = "gitbox.net/contact";
$prefix = strchr($str, '/', true); // Sortir: gitbox.net

4. Utiliser des suggestions et des précautions

  • Considérations de performance : Pour les grandes chaînes ou les appels à haute fréquence, déterminez si StrCHR () est vraiment nécessaire, ou si StrPOS () est utilisé pour contrôler la position plus précisément.

  • LICIBILITÉ : StrChr () exprime l'intention de Clear, ce qui convient très bien dans les scénarios simples où un seul personnage est requis.

  • Restrictions de recherche à plusieurs caractères : Non adapté à la recherche de sous-chaînes, uniquement pour les recherches de caractères (bien que le paramètre d'aiguille prenne en charge les chaînes, il ne correspond en fait que le premier caractère).