A PHP nyelvet évek óta aktívan használják a webfejlesztők körében. Mint minden szoftvernyelvben, a PHP-ben is vannak bevált gyakorlatok és kevéssé ismert hibák/visszaélések. Ebben a leckében a PHP strpos() Beszélni fogunk arról, hogyan lehet a funkcióját a legjobban használni, és kevéssé ismert információkkal.
Ne hasonlítsd össze a True-val
PHP nyelven strpos() függvény visszaadja a keresett szöveg kezdőpozícióját. strpos() Amikor a függvényt használjuk keresés közben, hogy a cél megtalálható-e a szövegben, mikor található a cél 1, amikor nem található 0 visszaadja a kódot. Ha a célpont a keresett szöveg legelején található, 0 visszatér. Ez nem pontosan a PHP hibája, de ennek eredményeként, amikor az alábbi példa szerint írt if lekérdezésben a célszöveg jelenlétét keresik, akkor a célszöveg az elején van. 0 Ez hibát fog okozni a szoftverben, mert visszatér.
Példa:
$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çmiyorA példában az else blokk működött. Ez helytelen! Mert az "Onur" név szerepel a példában használt szövegben. Ez azért van strpos() A függvényben, ha a keresett szöveg az adat elején van, a függvény neve "0 visszaküldeni a választ. Tehát hogyan győzzük le ezt a problémát? Más függvényt kell használnunk? Nem. Erre nincs szükség. Van egy nagyon egyszerű megoldás erre a problémára. Vizsgáljuk meg a példát és részletezzük.
$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çiyorEbben a példában az if blokkban lévő összehasonlítás megfelelően működött. Ennek az az oka, hogy az összes népszerű programozási nyelv, beleértve a PHP-t, és még a szoftverlogikát is 0 értékét false, 1 értékét true nek tekintendő. Mivel a visszatérési érték 0, amikor logikai típusú összehasonlítást végeznek az if blokkban, a 0 értéke hamis, és ez a hiba lép fel.
Használjon szigorú összehasonlítást hamis összehasonlításkor
Van még egy nagyon fontos részlet, amire az előző példában oda kell figyelnünk. Ha a szigorú összehasonlítás helyett egyenlőségi összehasonlítást (laza összehasonlítást) végzünk, akkor ismét ugyanazzal a hibával fogunk találkozni. Mivel az egyenlőségi összehasonlítás nem kérdőjelezi meg az adatok típusát, az ekvivalencia-összehasonlítás az adatok típusát is megkérdőjelezi. Vizsgáljuk meg egy helytelen példát arra, amiről beszélünk. Vegyünk egy példát ekvivalencia-összehasonlítás nélkül, és lássuk az eredményt
$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çmiyorKezeljük a kis- és nagybetűk érzékenységét
Az strpos() függvény alapértelmezés szerint megkülönbözteti a kis- és nagybetűket. Ha el akarjuk távolítani ezt az érzékenységet, akkor a stripos() függvényt kell használnunk. Nézzünk egy példát a stripos() függvényre:
$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çiyorAz strpos() függvénnyel ellenőrizhetjük, hogy a keresett szöveg többször előfordul-e
1. példa:
Az strpos() függvénnyel ellenőrizhetjük, hogy a célszöveg hányszor jelenik meg az adatok között. Az 1. példában ennek kreatív, de egyszerűbb és alapvető módját mutatjuk be, a 2. példában pedig a legjobbat, ami sokkal praktikusabb.
$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çiyor2. példa:
$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çiyorsubstr_count() Röviden, a függvény kiszámítja, hogy hány alszöveg kerül átadásra a célban, és hányszor. A funkció részletes dokumentációját és példáit itt találja -> https://www.php.net/manual/function.substr-count.php
Az strpos()
Ebben a cikkben strpos() Megtanultuk, hogyan kell a funkcióját a legjobban használni és kijavítani a leggyakoribb visszaéléseket. strpos() funkciójával stripos() és substr_count() Megismertük a funkcióikat is. Maradjon velünk a legjobb minőségű kódolási megközelítésekről szóló sorozatunk többi részével kapcsolatban.



