PHP-taal wordt al jaren actief gebruikt door webontwikkelaars. Zoals in elke softwaretaal kent PHP best practices en weinig bekende fouten/misbruik. In deze les PHP strpos() We zullen het hebben over hoe u de functie ervan op de beste manier kunt gebruiken en over weinig bekende informatie.

Vergelijk niet met True

in PHP-taal strpos() functie retourneert de startpositie van de gezochte tekst. strpos() Wanneer we de functie gebruiken tijdens het zoeken of het doel in de tekst wordt gevonden, wanneer het doel is gevonden 1, wanneer niet gevonden 0 geeft de code terug. Als het doel helemaal aan het begin van de gezochte tekst werd gevonden, 0 retourneert. Dit is niet bepaald een bug in PHP, maar als gevolg daarvan staat de doeltekst aan het begin wanneer er wordt gezocht naar de aanwezigheid van de doeltekst in de if-query die is geschreven zoals in het onderstaande voorbeeld. 0 Het zal een fout in de software veroorzaken omdat het terugkeert.

Voorbeeld:

$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

In het voorbeeld werkte het else-blok. Dit is verkeerd! Omdat de naam "Onur" wordt genoemd in de tekst die we in het voorbeeld hebben gebruikt. Dit komt omdat strpos() Als de gezochte tekst in de functie aan het begin van de gegevens staat, wordt de functie "0 is om het antwoord terug te geven. Dus hoe kunnen we dit probleem overwinnen? Moeten we een andere functie gebruiken? Nee. Dit is niet nodig. Er is een heel eenvoudige oplossing voor dit probleem. Laten we het voorbeeld bekijken en gedetailleerd maken.

$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

In dit voorbeeld werkte de vergelijking in het if-blok correct. De reden is dat alle populaire programmeertalen, inclusief PHP, en zelfs softwarelogica 0 waarde false, 1 waarde true wordt beschouwd als. Omdat de retourwaarde 0 is, wordt de waarde 0 als onwaar verwerkt wanneer er een vergelijking van het Booleaanse type wordt gemaakt in het if-blok, en treedt deze fout op.

Gebruik een strikte vergelijking bij het vergelijken met False

Er is nog een heel belangrijk detail waar we in het vorige voorbeeld op moeten letten. Als we een gelijkheidsvergelijking maken (losse vergelijking) in plaats van een strikte vergelijking, zullen we dezelfde fout opnieuw tegenkomen. Omdat bij gelijkheidsvergelijking het soort gegevens niet ter discussie wordt gesteld, stelt de gelijkwaardigheidsvergelijking ook het soort gegevens in vraag. Laten we een onjuist voorbeeld bekijken van waar we het over hebben. Laten we een voorbeeld doen zonder gelijkwaardigheidsvergelijking en het resultaat bekijken

$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

We kunnen hoofdlettergevoeligheid beheren

De functie strpos() is standaard hoofdlettergevoelig. Als we deze gevoeligheid willen verwijderen, moeten we de functie stripos() gebruiken. Laten we een voorbeeld bekijken van de functie 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

Met de functie strpos() kunnen we controleren of de gezochte tekst meer dan één keer voorkomt

1e voorbeeld:

Met de functie strpos() kunnen we controleren hoe vaak de doeltekst in de gegevens voorkomt. In het eerste voorbeeld laten we de creatieve maar eenvoudigere en basale manier zien om dit te doen, en in het tweede voorbeeld laten we de beste manier zien, die veel praktischer is.

$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

2e voorbeeld:

$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() Kortom, de functie berekent hoeveel subteksten in het doel worden doorgegeven en hoe vaak. Gedetailleerde documentatie en voorbeelden van deze functie vindt u hier -> https://www.php.net/manual/function.substr-count.php

Over strpos()

In dit artikel strpos() We hebben geleerd hoe we de functie ervan op de beste manier kunnen gebruiken en hoe we het meest voorkomende misbruik kunnen corrigeren. strpos() met zijn functie stripos() En substr_count() We leerden ook hun functies kennen. Houd ons in de gaten voor de rest van onze serie over codeerbenaderingen van de beste kwaliteit.