Gjuha PHP është përdorur në mënyrë aktive midis zhvilluesve të uebit për shumë vite. Si në çdo gjuhë softuerike, PHP ka praktikat më të mira dhe gabime/keqpërdorime pak të njohura. Në këtë mësim PHP strpos() Ne do të flasim për mënyrën e përdorimit të funksionit të tij në mënyrën më të mirë dhe informacionin pak të njohur.

Mos krahaso me të vërtetën

në gjuhën PHP strpos() funksioni kthen pozicionin fillestar të tekstit të kërkuar. strpos() Kur përdorim funksionin gjatë kërkimit nëse objektivi gjendet në tekst, kur objektivi gjendet 1, kur nuk gjendet 0 kthen kodin. Nëse objektivi u gjet në fillim të tekstit të kërkuar, 0 kthehet. Ky nuk është saktësisht një gabim në PHP, por si rezultat, kur prezenca e tekstit të synuar kërkohet në pyetjen if të shkruar si shembulli më poshtë, teksti i synuar është në fillim. 0 Do të shkaktojë një gabim në softuer sepse do të kthehet.

Shembull:

$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ë shembull, blloku tjetër funksionoi. Kjo është e gabuar! Sepse emri "Onur" përmendet në tekstin që kemi përdorur në shembull. Kjo për shkak se strpos() Në funksion, nëse teksti i kërkuar është në fillim të të dhënave, funksioni quhet "0 është të ktheni përgjigjen. Pra, si ta kapërcejmë këtë problem? A duhet të përdorim një funksion tjetër? Jo. Nuk ka nevojë për këtë. Ekziston një zgjidhje shumë e thjeshtë për këtë problem. Le të shqyrtojmë shembullin dhe ta detajojmë atë.

$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ë këtë shembull, krahasimi në bllokun if funksionoi si duhet. Arsyeja është se të gjitha gjuhët e njohura të programimit, përfshirë PHP, madje edhe logjikën e softuerit 0 vlerë false, 1 vlerë true konsiderohet si. Meqenëse vlera e kthyer është 0, kur bëhet një krahasim i tipit boolean në bllokun if, vlera 0 përpunohet si false dhe ndodh ky gabim.

Përdorni krahasim të rreptë kur krahasoni me false

Ekziston një detaj tjetër shumë i rëndësishëm që duhet t'i kushtojmë vëmendje në shembullin e mëparshëm. Nëse bëjmë një krahasim barazie (krahasim i lirshëm) në vend të një krahasimi të rreptë, do të hasim përsëri të njëjtin gabim. Për shkak se krahasimi i barazisë nuk vë në dyshim llojin e të dhënave, krahasimi i ekuivalencës vë në dyshim edhe llojin e të dhënave. Le të shqyrtojmë një shembull të pasaktë të asaj për të cilën po flasim. Le të bëjmë një shembull pa një krahasim të ekuivalencës dhe të shohim rezultatin

$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

Ne mund të menaxhojmë ndjeshmërinë e rastit

Funksioni strpos() është i ndjeshëm ndaj shkronjave të vogla si parazgjedhje. Nëse duam ta heqim këtë ndjeshmëri, duhet të përdorim funksionin stripos(). Le të shohim një shembull të funksionit 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

Mund të kontrollojmë nëse teksti i kërkuar shfaqet më shumë se një herë me funksionin strpos().

Shembulli 1:

Mund të kontrollojmë se sa herë teksti i synuar shfaqet në të dhëna me funksionin strpos(). Në shembullin e parë, ne do të tregojmë mënyrën krijuese, por më të thjeshtë dhe themelore për ta bërë këtë, dhe në shembullin e dytë, do të tregojmë mënyrën më të mirë, e cila është shumë më praktike.

$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

Shembulli i 2-të:

$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() Me pak fjalë, funksioni llogarit sa nëntekste kalohen në objektiv dhe sa herë. Ju mund të gjeni dokumentacion të detajuar dhe shembuj të këtij funksioni këtu -> https://www.php.net/manual/function.substr-count.php

Rreth strpos()

Në këtë artikull strpos() Mësuam se si ta përdorim funksionin e tij në mënyrën më të mirë dhe të korrigjojmë keqpërdorimet më të zakonshme. strpos() me funksionin e tij stripos() dhe substr_count() Gjithashtu u njohëm me funksionet e tyre. Qëndroni të sintonizuar për pjesën tjetër të serisë sonë mbi qasjet e kodimit me cilësi më të mirë.