Maison >développement back-end >tutoriel php >Pourquoi la comparaison de « strpos() » à « true » ne parvient-elle pas à détecter les occurrences de chaîne en PHP ?
En tentant de déterminer si une chaîne contient un élément indésirable, les programmeurs peuvent rencontrer des résultats inattendus lors de l'utilisation de strpos() à des fins directes. comparaisons d'égalité.
Considérez ceci scénario :
$link = 'https://google.com'; $unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png']; foreach ($unacceptables as $unacceptable) { if (strpos($link, $unacceptable) === true) { echo 'Unacceptable Found<br />'; } else { echo 'Acceptable!<br />'; } }
Curieusement, ce code affiche « Acceptable ! » pour chaque élément dans $inacceptables, bien que https soit présent dans $link. Ce comportement apparemment paradoxal découle de la nature de strpos() elle-même.
Plonger dans la documentation officielle PHP clarifie le véritable objectif de la fonction :
Renvoie la position numérique de la première occurrence de l'aiguille dans le chaîne de botte de foin.
Par conséquent, lorsque vous comparez directement le résultat de strpos() avec true, vous vérifiez effectivement l'existence de l'élément indésirable dans $link, pas son égalité avec true.
Pour résoudre ce problème, une approche plus appropriée consiste à utiliser !== false dans l'instruction if :
// ... if (strpos($link, $unacceptable) !== false) {
Ce faisant, vous évaluer correctement si strpos() a détecté la présence de l'élément indésirable, entraînant le résultat souhaité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!