Limbajul PHP a fost folosit în mod activ printre dezvoltatorii web de mulți ani. Ca în orice limbă de software, PHP are cele mai bune practici și erori/utilizari greșite puțin cunoscute. În această lecție PHP strpos() Vom vorbi despre cum să-și folosească funcția în cel mai bun mod și despre informații puțin cunoscute.

Nu compara cu True

în limbajul PHP strpos() funcția returnează poziția de pornire a textului căutat. strpos() Când folosim funcția în timp ce căutăm dacă ținta este găsită în text, când ținta este găsită 1, când nu este găsit 0 returnează codul. Dacă ținta a fost găsită chiar la începutul textului căutat, 0 se întoarce. Acesta nu este tocmai o eroare în PHP, dar ca rezultat, atunci când prezența textului țintă este căutată în interogarea if scrisă ca exemplul de mai jos, textul țintă este la început. 0 Va cauza o eroare în software deoarece va reveni.

Exemplu:

$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

În exemplu, blocul else a funcționat. Acest lucru este greșit! Pentru că numele „Onur” este menționat în textul pe care l-am folosit în exemplu. Aceasta pentru că strpos() În funcție, dacă textul căutat este la începutul datelor, funcția se numește "0 este să returnezi răspunsul. Deci cum depășim această problemă? Trebuie să folosim o altă funcție? Nu. Nu este nevoie de asta. Există o soluție foarte simplă la această problemă. Să examinăm exemplul și să-l detaliem.

$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

În acest exemplu, comparația din blocul if a funcționat corect. Motivul este că toate limbajele de programare populare, inclusiv PHP, și chiar logica software 0 valoare false, 1 valoare true este considerat ca. Deoarece valoarea returnată este 0, atunci când se face o comparație de tip boolean în blocul if, valoarea 0 este procesată ca fals și apare această eroare.

Utilizați o comparație strictă când comparați cu fals

Există un alt detaliu foarte important căruia trebuie să fim atenți în exemplul anterior. Dacă facem o comparație de egalitate (comparație liberă) în loc de o comparație strictă, vom întâlni din nou aceeași eroare. Deoarece comparația de egalitate nu pune sub semnul întrebării tipul de date, comparația de echivalență pune sub semnul întrebării și tipul de date. Să examinăm un exemplu incorect despre ceea ce vorbim. Să facem un exemplu fără o comparație de echivalență și să vedem rezultatul

$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

Putem gestiona sensibilitatea cazurilor

Funcția strpos() este sensibilă la majuscule și minuscule în mod implicit. Dacă vrem să eliminăm această sensibilitate, trebuie să folosim funcția stripos(). Să ne uităm la un exemplu de funcție 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

Putem verifica dacă textul căutat apare mai mult decât o dată cu funcția strpos().

primul exemplu:

Putem verifica de câte ori apare textul țintă în date cu funcția strpos(). În primul exemplu, vom arăta modul creativ, dar mai simplu și de bază de a face acest lucru, iar în al doilea exemplu, vom arăta cel mai bun mod, care este mult mai practic.

$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

al 2-lea exemplu:

$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() Pe scurt, funcția calculează câte subtexte sunt transmise în țintă și de câte ori. Puteți găsi documentație detaliată și exemple ale acestei funcții aici -> https://www.php.net/manual/function.substr-count.php

Despre strpos()

În acest articol strpos() Am învățat cum să folosim funcția sa în cel mai bun mod și să corectăm cele mai frecvente utilizări greșite. strpos() cu functia sa stripos() şi substr_count() Am ajuns să le cunoaștem și funcțiile. Rămâneți la curent pentru restul seriei noastre despre abordările de codificare de cea mai bună calitate.