Jazyk PHP je aktivně používán mezi webovými vývojáři již mnoho let. Jako v každém softwarovém jazyce má PHP osvědčené postupy a málo známé chyby/chyby. V této lekci PHP strpos() Povíme si, jak co nejlépe využít jeho funkci a málo známé informace.

Nesrovnávejte se s pravdou

v jazyce PHP strpos() funkce vrací počáteční pozici hledaného textu. strpos() Když funkci použijeme při hledání, zda je cíl v textu nalezen, když je cíl nalezen 1, když nebyl nalezen 0 vrátí kód. Pokud byl cíl nalezen na samém začátku hledaného textu, 0 se vrací. Toto není přesně chyba v PHP, ale v důsledku toho, když je přítomnost cílového textu hledána v dotazu if napsaném jako příklad níže, je cílový text na začátku. 0 Způsobí chybu v softwaru, protože se vrátí.

Příklad:

$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

V příkladu fungoval blok else. To je špatně! Protože jméno " Onur" je uvedeno v textu, který jsme použili v příkladu. To proto strpos() Pokud je ve funkci hledaný text na začátku dat, funkce se nazývá "0 je vrátit odpověď. Jak tedy tento problém překonat? Musíme použít jinou funkci? Ne. To není potřeba. Na tento problém existuje velmi jednoduché řešení. Podívejme se na příklad a podrobně jej.

$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

V tomto příkladu porovnání v bloku if fungovalo správně. Důvodem je, že všechny populární programovací jazyky, včetně PHP, a dokonce i softwarová logika 0 hodnotu false, 1 hodnotu true se považuje za. Protože vrácená hodnota je 0, při porovnání typu boolean v bloku if je hodnota 0 zpracována jako nepravda a dojde k této chybě.

Při porovnávání s nepravdou použijte přísné srovnání

V předchozím příkladu je ještě jeden velmi důležitý detail, kterému musíme věnovat pozornost. Pokud místo striktního srovnání provedeme rovnostové srovnání (volné srovnání), narazíme znovu na stejnou chybu. Protože porovnání rovnosti nezpochybňuje typ dat, srovnání ekvivalence také zpochybňuje typ dat. Podívejme se na nesprávný příklad toho, o čem mluvíme. Udělejme příklad bez srovnání ekvivalence a podívejme se na výsledek

$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

Dokážeme rozlišovat malá a velká písmena

Funkce strpos() ve výchozím nastavení rozlišuje velká a malá písmena. Pokud chceme tuto citlivost odstranit, musíme použít funkci stripos(). Podívejme se na příklad funkce 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

Můžeme zkontrolovat, zda se hledaný text vyskytuje více než jednou pomocí funkce strpos().

1. příklad:

Pomocí funkce strpos() můžeme zkontrolovat, kolikrát se cílový text objeví v datech. V 1. příkladu si ukážeme kreativní, ale jednodušší a základní způsob, jak toho dosáhnout, a ve 2. příkladu si ukážeme nejlepší způsob, který je mnohem praktičtější.

$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. příklad:

$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() Stručně řečeno, funkce vypočítá, kolik podtextů je předáno do cíle a kolikrát. Podrobnou dokumentaci a příklady této funkce naleznete zde -> https://www.php.net/manual/function.substr-count.php

O strpos()

V tomto článku strpos() Naučili jsme se, jak co nejlépe využít jeho funkci a napravit nejčastější zneužití. strpos() s jeho funkcí stripos() a substr_count() Seznámili jsme se i s jejich funkcemi. Zůstaňte naladěni na zbytek naší série o nejkvalitnějších přístupech ke kódování.