PHP езикът се използва активно сред уеб разработчиците от много години. Както във всеки софтуерен език, PHP има най-добри практики и малко известни грешки/злоупотреби. В този урок PHP strpos() Ще говорим за това как да използвате функцията му по най-добрия начин и малко известна информация.
Не сравнявайте с истината
на език PHP strpos() функцията връща началната позиция на търсения текст. strpos() Когато използваме функцията, докато търсим дали целта е намерена в текста, когато целта е намерена 1, когато не е намерен 0 връща кода. Ако целта е намерена в самото начало на търсения текст, 0 връща. Това не е точно грешка в PHP, но в резултат на това, когато присъствието на целевия текст се търси в if заявката, написана като примера по-долу, целевият текст е в началото. 0 Това ще доведе до грешка в софтуера, защото ще се върне.
Пример:
$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В примера блокът else работи. Това е грешно! Тъй като в текста, който използвахме в примера, се споменава името "Onur". Това е защото strpos() Във функцията, ако търсеният текст е в началото на данните, функцията се нарича "0 е да върне отговора. И така, как да преодолеем този проблем? Трябва ли да използваме различна функция? Не. Няма нужда от това. Има много просто решение на този проблем. Нека разгледаме примера и го детайлизираме.
$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В този пример сравнението в блока if работи правилно. Причината е, че всички популярни езици за програмиране, включително PHP, и дори софтуерна логика 0 стойност false, 1 стойност true се счита за. Тъй като върнатата стойност е 0, когато се направи сравнение на булев тип в блока if, стойността 0 се обработва като false и възниква тази грешка.
Използвайте строго сравнение, когато сравнявате с невярно
Има още един много важен детайл, на който трябва да обърнем внимание в предишния пример. Ако направим сравнение на равенство (свободно сравнение) вместо строго сравнение, отново ще срещнем същата грешка. Тъй като сравнението на равенството не поставя под въпрос типа на данните, сравнението на еквивалентността също поставя под въпрос типа на данните. Нека разгледаме един неправилен пример за това, за което говорим. Нека направим пример без сравнение на еквивалентност и да видим резултата
$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Можем да управляваме чувствителността към малки и малки букви
Функцията strpos() е чувствителна по подразбиране. Ако искаме да премахнем тази чувствителност, трябва да използваме функцията stripos(). Нека да разгледаме пример за функцията 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Можем да проверим дали търсеният текст се среща повече от веднъж с функцията strpos().
1-ви пример:
Можем да проверим колко пъти целевият текст се появява в данните с функцията strpos(). В първия пример ще покажем креативния, но по-прост и основен начин за това, а във втория пример ще покажем най-добрия начин, който е много по-практичен.
$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-ри пример:
$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() Накратко, функцията изчислява колко подтекста са предадени в целта и колко пъти. Можете да намерите подробна документация и примери за тази функция тук -> https://www.php.net/manual/function.substr-count.php
Относно strpos()
В тази статия strpos() Научихме как да използваме функцията му по най-добрия начин и да коригираме най-често срещаните злоупотреби. strpos() със своята функция stripos() и substr_count() Запознахме се и с техните функции. Очаквайте останалата част от нашата поредица за най-качествените подходи за кодиране.



