Мова 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(). У 1-му прикладі ми покажемо креативний, але простіший і базовий спосіб зробити це, а в 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";

// 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() ve substr_count() Ми також познайомилися з їх функціями. Слідкуйте за нашими новинами про найякісніші підходи до кодування.