次のphpコードが機能しないのはなぜですか:
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
$search は $string にあるため、見つかったときにトリガーされるべきではありませんか?
この関数は、ブール値の FALSE を返す場合がありますが、0 や "" など、FALSE と評価されるブール値以外の値を返す場合もあります。詳細については、ブール値のセクションを参照してください。この関数の戻り値をテストするには、=== 演算子を使用します。
あなたの場合、文字列はインデックス0
とphpにあります0 == false
解決策は、厳密なコンパレータを使用することです
echo strpos($string,$search) === false
? "not found"
: "found";
もう一つ
echo is_int(strpos($string,$search))
? "found"
: "not found";
または何か...興味深いことを言ってみましょう:D 説明のためだけに。これはお勧めしません。
echo strpos('_' . $string,$search) // we just shift the string 1 to the right
? "found"
: "not found";
これは、検索文字列が位置 0 で見つかっているために発生しています。
if(strpos($string,$search) !== FALSE)
それ以外の
if(strpos($string,$search))
strpos
見つかった最初のオフセットを返します$search
- 0
。0
に評価されfalse
ます。したがって、if は失敗します。
$search
が見つからなかった場合は、 をstrpos
返しますFALSE
。最初に の戻り値を!== FALSE
確認し、次にオフセットを確認します。
コメントでこれを指摘してくれたすべての人に感謝します。
マニュアルから:
この関数は、ブール値の FALSE を返す場合がありますが、0 や "" など、FALSE と評価されるブール値以外の値を返す場合もあります。詳細については、ブール値のセクションを参照してください。 この関数の戻り値をテストするには、=== 演算子を使用します。
あなたの例では、使用する必要があります
$string = "123";
$search = "123";
if ( false !== strpos( $string, $search ) ) {
echo "found";
} else {
echo "not found";
}
strpos は、検索する文字列が見つかった場合、その文字列の数値位置を返します。したがって、あなたの場合、代わりにこれを実行したいと考えています:
$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }
基本的に、文字列が見つからない場合は false を返します
これを使用できます:
<?php
$string = "123";
$find = "123";
$strpos = strpos($string, $find);
if($strpos || $strpos === (int)0) {
echo "Found it!";
} else {
echo "Not Found!";
}
?>
十分に文書化された問題がここで説明されています。strpos は単に「0」を返しています