- 2008年11月 6日 12:16
- アフィリエイト塾
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つの状態が返されるので、注意が必要です。
- Newer: 新サイトの開発は順調です
- Older: 香澄公園::鴨の季節です