24
if(strpos("http://www.example.com","http://www.")==0){ // do work}

私はこれが真実として解決されることを期待します、それはそうします。しかし、私がするとどうなりますか

if(strpos("abcdefghijklmnop","http://www.")==0){// do work}

これはphp5にも渡されます。なぜなら、私が理解できる限り、strposはfalseを返し、これは0として変換されるからです。

これは正しい考え方/行動ですか?もしそうなら、その部分文字列が別の文字列の先頭にあることをテストするための回避策は何ですか?

4

5 に答える 5

60

はい、これは正しい/予想される動作です:

  • strpos0文字列の先頭に一致がある場合に戻ることができます
  • false一致するものがない場合は戻ります

重要なのは、と==を比較するために使用するべきではないということです。次のように使用する必要があります:0false===

if(strpos("abcdefghijklmnop","http://www.") === 0) {

}

または :

if(strpos("abcdefghijklmnop","http://www.") === false) {

}


詳細については、比較演算子を参照してください。

  • $a == $bに等しい場合になりTRUEます。$a$b
  • $a === $bがに等しいTRUE場合は、同じタイプになります。$a$b

そして、のマニュアルページをstrpos引用します:

この関数は ブール値を返す場合がありますが、またはなどのと評価されるFALSE非ブール値を返す場合もあり ます。 詳細については、ブール値のセクションをお読みください。この関数の戻り値をテストするには、 演算子を使用します。FALSE0""

===

于 2010-03-07T15:15:37.267 に答える
14

===以下に示すように、タイプ値を!==比較します。

if (strpos("abcdefghijklmnop", "http://www.") !== false) {
     // do work     
}
于 2010-03-07T15:15:08.780 に答える
5

strposはintまたはbooleanfalseを返します。==演算子も0を偽と評価します。===演算子(3つの等号)を使用して、比較対象の型が同じであると評価できるかどうかを確認するのではなく、同じであることも確認します。

それで

if (strpos($hastack, $needle) === 0)
{
    // the $needle is found at position 0 in the $haystack
}
于 2010-03-07T15:17:09.803 に答える
1

0strposは、最初に一致が見つかったときからの可能な戻り値です。一致するものが見つからない場合は、false(ブール値)を返します。したがって、値をチェックするだけの演算子を使用するのではなく、値とタイプをチェックする演算子をstrpos使用して戻り値をチェックする必要があります。=====

于 2010-03-07T15:17:40.153 に答える
-1

私は個人的にこのように使用する傾向があります:

if(!strpos($v,'ttp:'))$v='http://'.$v;

また

if(strpos(' '.$v,'http'))

「 」の位置を避けるために、常に 歓声0よりも多くの数にします0

于 2013-01-13T12:58:11.440 に答える