Le langage PHP est activement utilisé par les développeurs Web depuis de nombreuses années. Comme dans tout langage logiciel, PHP a de bonnes pratiques et des erreurs/abus peu connus. Dans cette leçon PHP strpos() Nous parlerons de la meilleure façon d’utiliser sa fonction et d’informations peu connues.

Ne comparez pas avec True

en langage PHP strpos() La fonction renvoie la position de départ du texte recherché. strpos() Quand on utilise la fonction en cherchant si la cible est trouvée dans le texte, quand la cible est trouvée 1, lorsqu'il n'est pas trouvé 0 renvoie le code. Si la cible a été trouvée au tout début du texte recherché, 0 revient. Ce n'est pas exactement un bug de PHP, mais du coup, lorsque la présence du texte cible est recherchée dans la requête if écrite comme l'exemple ci-dessous, le texte cible est au début. 0 Cela provoquera une erreur dans le logiciel car il renverra .

Exemple :

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) === true) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

Dans l'exemple, le bloc else a fonctionné. C'est faux ! Parce que le nom « Onur » est mentionné dans le texte que nous avons utilisé dans l'exemple. C'est parce que strpos() Dans la fonction, si le texte recherché se trouve au début de la donnée, la fonction s'appelle "0 est de retourner la réponse. Alors, comment surmonter ce problème ? Devons-nous utiliser une fonction différente ? Non, ce n’est pas nécessaire. Il existe une solution très simple à ce problème. Examinons l'exemple et détaillons-le.

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) !== false) { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

Dans cet exemple, la comparaison dans le bloc if a fonctionné correctement. La raison en est que tous les langages de programmation populaires, y compris PHP, et même la logique logicielle 0 valeur false, 1 valeur true est considéré comme. Puisque la valeur de retour est 0, lorsqu'une comparaison de type booléen est effectuée dans le bloc if, la valeur 0 est traitée comme fausse et cette erreur se produit.

Utilisez une comparaison stricte lorsque vous comparez avec False

Il y a un autre détail très important auquel nous devons prêter attention dans l’exemple précédent. Si nous effectuons une comparaison d’égalité (comparaison lâche) au lieu d’une comparaison stricte, nous rencontrerons à nouveau la même erreur. Parce que la comparaison d’égalité ne remet pas en question le type de données, la comparaison d’équivalence remet également en question le type de données. Examinons un exemple incorrect de ce dont nous parlons. Faisons un exemple sans comparaison d'équivalence et voyons le résultat

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) != false) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

Nous pouvons gérer la sensibilité à la casse

La fonction strpos() est sensible à la casse par défaut. Si nous voulons supprimer cette sensibilité, nous devons utiliser la fonction stripos(). Regardons un exemple de la fonction stripos() :

$data = "Onur Özden Web Çözümleri";
$search = "onur";

if (stripos($data, $search) !== false) {  // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

Nous pouvons vérifier si le texte recherché apparaît plus d'une fois avec la fonction strpos()

1er exemple :

Nous pouvons vérifier combien de fois le texte cible apparaît dans les données avec la fonction strpos(). Dans le 1er exemple, nous montrerons la manière créative mais plus simple et basique de procéder, et dans le 2ème exemple, nous montrerons la meilleure façon, qui est beaucoup plus pratique.

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// undefined hatası almamak için değişkenleri tanımla ve varsayılan olarak 0 değerini ver;
$position = 0;
$count = 0;

while (($position = strpos($data, $search, $position)) !== false) {
    $count++; // Kaçıncı kez geçtiğini say
    $position++; // Sonraki arama için pozisyonu artır

}

// Sonucu yazdır
echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor<br>";

// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

2ème exemple :

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// substr_count fonksiyonu ile $search ifadesinin $data içindeki toplam sayısını hesapla
$count = substr_count($data, $search);

// veri içerisinde hedef kelime geçmiyorsa "0 adet geçiyor" gibi anlamsız bir ifade çıktılanmaması için koşul
if ($count > 0) { // veride hedef ifade geçtiği için bu blok çalışacak
    echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor";
} else {
    echo "Veri içerisinde '{$search}' kelimesi geçmiyor.";
}
// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

substr_count() En bref, la fonction calcule combien de sous-textes sont transmis dans la cible et combien de fois. Vous pouvez trouver une documentation détaillée et des exemples de cette fonction ici -> https://www.php.net/manual/function.substr-count.php

À propos de strpos()

Dans cet article strpos() Nous avons appris à utiliser au mieux sa fonction et à corriger les abus les plus courants. strpos() avec sa fonction stripos() et substr_count() Nous avons également appris à connaître leurs fonctions. Restez à l'écoute pour le reste de notre série sur les approches de codage de la meilleure qualité.