Язык 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çiyor

2-й пример:

$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() Короче говоря, функция вычисляет, сколько подтекстов передается в цель и сколько раз. Подробную документацию и примеры этой функции вы можете найти здесь -> https://www.php.net/manual/function.substr-count.php

О функции strpos()

В этой статье strpos() Мы научились использовать его функцию наилучшим образом и исправить наиболее распространенные случаи неправильного использования. strpos() со своей функцией stripos() и substr_count() Мы также познакомились с их функциями. Следите за оставшейся частью нашей серии статей, посвященных наиболее качественным подходам к кодированию.