どうも、コウイチです。

今回は、PHPのexplode関数について、ハマったのでメモします。

思い込みでコーディングしてると、恐ろしいバグに出会ってしまいますね(;゚Д゚)

そもそも、explode関数とは何か?から見ていきましょう。

explode関数とは

explode関数とは、指定した区切り文字で、文字列を区切り、配列として返します。

今回は、カンマで文字列を分割してみます。

 

実行結果

フルーツは5種類です。
Array
(
[0] => りんご
[1] => バナナ
[2] => いちご
[3] => メロン
[4] => みかん
)
うむ。納得の結果です。

explode関数の危険な仕様

それでは次に、危険な仕様を再現します。

$str変数を空っぽにして試してみましょう。

 

どうなると思いますか?

 

僕の予想では、空の配列が返されると思ってました。当然ですよね・・・?

 

実行結果

フルーツは1種類です。
Array
(
[0] =>
)

 

コウイチコウイチ

!?

フルーツの数が1種類!?こいつは何を言っているんだ?

どうみても空っぽだろ。

要素数0の空の配列が返されると思っていた僕の頭の中はパニック状態に。

得体のしれないフルーツの正体

この、得体のしれない1種類の要素は何者なのでしょうか。

 

格闘すること数分。

 

どうやら、何もない要素が1つある配列が返されたようです。

 

なんとも奇妙な仕様でしょうか?

 

解決案

解決案ですが、$str変数が空の可能性がある場合は、条件分岐して対応した方がよさそうです。

 

実行結果

フルーツは0種類です。

まとめ

思い込みでハマらないように、気を付けたいものです。

参考になれば幸いです。