Язык 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() Мы также познакомились с их функциями. Следите за оставшейся частью нашей серии статей, посвященных наиболее качественным подходам к кодированию.



