PHP jezik se već godinama aktivno koristi među web programerima. Kao i u svakom softverskom jeziku, PHP ima najbolje prakse i malo poznate pogreške/zlouporabe. U ovoj lekciji PHP strpos() Razgovarat ćemo o tome kako na najbolji način iskoristiti njegovu funkciju i malo poznate informacije.

Ne uspoređujte s Istinom

u PHP jeziku strpos() funkcija vraća početnu poziciju traženog teksta. strpos() Kada koristimo funkciju dok tražimo je li cilj pronađen u tekstu, kada je cilj pronađen 1, kada nije pronađen 0 vraća kod. Ako je meta pronađena na samom početku traženog teksta, 0 vraća. Ovo nije baš pogreška u PHP-u, ali kao rezultat toga, kada se prisutnost ciljnog teksta pretražuje u if upitu napisanom kao primjer u nastavku, ciljni tekst je na početku. 0 To će uzrokovati pogrešku u softveru jer će se vratiti.

Primjer:

$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

U primjeru je blok else radio. Ovo nije u redu! Zato što se ime "Onur" spominje u tekstu koji smo koristili u primjeru. Ovo je zato što strpos() U funkciji, ako je traženi tekst na početku podataka, funkcija se zove "0 je vratiti odgovor. Dakle, kako ćemo prevladati ovaj problem? Moramo li koristiti drugu funkciju? Ne. Nema potrebe za ovim. Za ovaj problem postoji vrlo jednostavno rješenje. Pogledajmo primjer i detaljizirajmo ga.

$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

U ovom primjeru, usporedba u bloku if radila je ispravno. Razlog je što svi popularni programski jezici, uključujući PHP, pa čak i softverska logika 0 vrijednost false, 1 vrijednost true smatra se kao. Budući da je povratna vrijednost 0, kada se napravi usporedba Booleovog tipa u if bloku, vrijednost 0 se obrađuje kao lažna i javlja se ova pogreška.

Koristite strogu usporedbu kada uspoređujete s lažnom

Postoji još jedan vrlo bitan detalj na koji moramo obratiti pozornost u prethodnom primjeru. Ako napravimo usporedbu jednakosti (labavu usporedbu) umjesto stroge usporedbe, ponovno ćemo naići na istu pogrešku. Budući da usporedba jednakosti ne dovodi u pitanje vrstu podataka, usporedba ekvivalencije također dovodi u pitanje vrstu podataka. Ispitajmo netočan primjer onoga o čemu govorimo. Napravimo primjer bez usporedbe ekvivalencije i vidimo rezultat

$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

Možemo upravljati razlikovanjem velikih i malih slova

Funkcija strpos() prema zadanim postavkama razlikuje velika i mala slova. Ako želimo ukloniti ovu osjetljivost, moramo koristiti funkciju stripos(). Pogledajmo primjer funkcije 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

Pomoću funkcije strpos() možemo provjeriti pojavljuje li se traženi tekst više puta

1. primjer:

Funkcijom strpos() možemo provjeriti koliko se puta ciljni tekst pojavljuje u podacima. U 1. primjeru ćemo pokazati kreativan, ali jednostavniji i osnovni način kako to učiniti, au 2. primjeru ćemo pokazati najbolji način, koji je puno praktičniji.

$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. primjer:

$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() Ukratko, funkcija izračunava koliko je podteksta proslijeđeno u cilju i koliko puta. Detaljnu dokumentaciju i primjere ove funkcije možete pronaći ovdje -> https://www.php.net/manual/function.substr-count.php

O strpos()

U ovom članku strpos() Naučili smo kako na najbolji način koristiti njegovu funkciju i ispraviti najčešće zlouporabe. strpos() sa svojom funkcijom stripos() I substr_count() Upoznali smo i njihove funkcije. Pratite ostatak naše serije o najkvalitetnijim pristupima kodiranju.