PHP 言語は、Web 開発者の間で長年にわたって積極的に使用されてきました。すべてのソフトウェア言語と同様に、PHP にもベスト プラクティスとあまり知られていないエラー/誤用があります。このレッスンでは PHP strpos() その機能の上手な使い方や知られざる情報などをお話しします。

True と比較しないでください

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ブロック内でboolean型の比較を行うと、値0がfalseとして処理され、このエラーが発生します。

False と比較する場合は厳密な比較を使用する

前の例には、注意する必要がある非常に重要な詳細がもう 1 つあります。厳密な比較ではなく等価比較 (緩やかな比較) を行うと、同じエラーが再び発生します。等価比較ではデータのタイプが問われないため、等価比較ではデータのタイプも問われます。私たちが話していることの間違った例を調べてみましょう。 等価比較を行わない例を実行して、結果を見てみましょう

$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() 関数を使用する必要があります。 tripos() 関数の例を見てみましょう。

$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() 関数を使用すると、対象のテキストがデータ内に何回出現するかを確認できます。最初の例では、これを行うための創造的だがシンプルで基本的な方法を示し、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() それらの機能についても知ることができました。最高品質のコーディング アプローチに関する残りのシリーズにご期待ください。