Home > アフィリエイト塾 > PHPの落とし穴::strPos関数

PHPの落とし穴::strPos関数

PHP言語の豊富な関数群のなかにstrPos関数があります。

 

strPos関数は文字列内を検索する関数で、第1引数に文字列、第2引数に文字列を設定し、第2引数の文字列が最初に現れる位置を返します。1文字目を「0」、2文字目を「1」、としてカウントした位置を返します。第2引数の文字列が見つからなかった場合、長さ0の文字列「""」(FALSEと同義)を返します。

strPos関数はユーザーエージェント情報を解析し、携帯端末のキャリア(ドコモ、AU、SoftBank)を判別するときに便利な関数です。

strPos関数の落とし穴は、検索文字列が1文字目が一致した場合、「0」が返されます。また、見つからなかった場合は、「FALSE」が返されることです。

例えば、下記のように記述した場合、いずれのケースも条件が成立することに落とし穴があります。

例1)
$data = "ABCDEF"
if (strPos($data, "ABC") == 0) {
 条件成立時の処理
}

例2)
$data = "ABCDEF"
if (strPos($data, "XYZ") == 0) {
 条件成立時の処理
}

例2の場合、検索文字が見つからないため、「FALSE」が返されますが、「0」と同義のため、条件が成立してしまいます。

私はこの落とし穴で30分間、悩みました。

長さ0の文字列「""」が返されるので、条件は成立しないと考えていました。

 

このような場合、PHP言語では変数の型を含めて、条件判断する必要があります。例2の場合、下記のように記述すれば条件は成立しません。「==」を「===」と修正します。

例2の修正)
$data = "ABCDEF"
if (strPos($data, "XYZ") === 0) {
 条件成立時の処理
}

 

Perl言語のindex関数は、文字列が見つからなかった場合、「-1」が返されますので、このような間違いは発生しません。

PHP言語のstrPos関数は、文字列が見つからない場合は2つの状態が返されるので、注意が必要です。

 

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://www.affiliatenet.jp/cgi-bin/mt/mt-tb.cgi/589
Listed below are links to weblogs that reference
PHPの落とし穴::strPos関数 from アフィリエイトネット ブログ

Home > アフィリエイト塾 > PHPの落とし穴::strPos関数

Return to page top