PHP fournit plusieurs méthodes efficaces pour déterminer si une chaîne commence par une sous-chaîne spécifique. Cet article explorera trois approches courantes : l’utilisation des fonctions substr()
, strpos()
et strncmp()
. Chaque méthode présente des forces et des faiblesses, la rendant adaptée à différents scénarios.
Table des matières
- Utiliser
substr()
pour vérifier une sous-chaîne de début - Utiliser
strpos()
pour vérifier une sous-chaîne de début - Utiliser
strncmp()
pour vérifier une sous-chaîne de début - Choisir la bonne méthode
Utiliser substr()
pour vérifier une sous-chaîne de début
La fonction substr()
extrait une partie d’une chaîne. Nous pouvons l’utiliser pour vérifier si le début d’une chaîne correspond à notre sous-chaîne cible. Cette approche est simple et facile à comprendre.
<?php
function startsWithSubstr(string $haystack, string $needle): bool {
return substr($haystack, 0, strlen($needle)) === $needle;
}
$string = "Ceci est une chaîne de test.";
$substring = "Ceci";
if (startsWithSubstr($string, $substring)) {
echo "'$string' commence par '$substring'n";
} else {
echo "'$string' ne commence pas par '$substring'n";
}
$string2 = "Une autre chaîne de test.";
$substring2 = "Test";
if (startsWithSubstr($string2, $substring2)) {
echo "'$string2' commence par '$substring2'n";
} else {
echo "'$string2' ne commence pas par '$substring2'n";
}
?>
Ce code extrait la partie de $haystack
ayant la longueur de $needle
, en commençant à l’index 0. Il effectue ensuite une comparaison stricte (===
) pour s’assurer que le type et la valeur correspondent. Cette méthode est efficace pour les sous-chaînes courtes.
Utiliser strpos()
pour vérifier une sous-chaîne de début
La fonction strpos()
trouve la position de la première occurrence d’une sous-chaîne. Si la sous-chaîne est au début, sa position sera 0.
<?php
function startsWithPos(string $haystack, string $needle): bool {
//strpos retourne false si needle n'est pas trouvé, donc on utilise !== au lieu de !=
return strpos($haystack, $needle) === 0;
}
$string = "Ceci est une chaîne de test.";
$substring = "Ceci";
if (startsWithPos($string, $substring)) {
echo "'$string' commence par '$substring'n";
} else {
echo "'$string' ne commence pas par '$substring'n";
}
$string2 = "Une autre chaîne de test.";
$substring2 = "Test";
if (startsWithPos($string2, $substring2)) {
echo "'$string2' commence par '$substring2'n";
} else {
echo "'$string2' ne commence pas par '$substring2'n";
}
?>
Il s’agit d’une méthode concise et fréquemment utilisée. Une comparaison stricte (=== 0
) est cruciale car strpos()
renvoie false
si l’aiguille n’est pas trouvée.
Utiliser strncmp()
pour vérifier une sous-chaîne de début
La fonction strncmp()
compare des parties de deux chaînes. Elle est particulièrement utile pour les comparaisons sensibles à la casse ou lorsqu’on ne vérifie qu’un nombre spécifique de caractères.
<?php
function startsWithStrncmp(string $haystack, string $needle): bool {
return strncmp($haystack, $needle, strlen($needle)) === 0;
}
$string = "Ceci est une chaîne de test.";
$substring = "Ceci";
if (startsWithStrncmp($string, $substring)) {
echo "'$string' commence par '$substring'n";
} else {
echo "'$string' ne commence pas par '$substring'n";
}
$string2 = "Une autre chaîne de test.";
$substring2 = "Test";
if (startsWithStrncmp($string2, $substring2)) {
echo "'$string2' commence par '$substring2'n";
} else {
echo "'$string2' ne commence pas par '$substring2'n";
}
?>
strncmp()
compare les premiers strlen($needle)
caractères de $haystack
avec $needle
. Une valeur de retour de 0 signifie qu’ils sont identiques. Cette fonction est efficace et offre plus de contrôle.
Choisir la bonne méthode
Pour la simplicité et la lisibilité avec des sous-chaînes plus courtes, substr()
est un bon choix. strpos()
fournit une solution concise et efficace pour la plupart des cas. strncmp()
offre plus de flexibilité, en particulier pour les comparaisons sensibles à la casse ou lorsqu’on limite la comparaison à un certain nombre de caractères. Pour les très grandes chaînes, elle pourrait offrir un léger avantage en termes de performances, mais pour la plupart des cas d’utilisation courants, strpos()
est généralement suffisant.