文字列の分割を行う関数の説明は以下の記事で行いましたが、今回は少し気になった件に付いて記します。 
⇒PHP 標準関数その1・文字列の分割・結合を行う関数(explode, implode)について 
■一般的なexplode関数の使い方
先ずは explode 関数の一般的な使い方ですが、以下の様なソースを作成します。
<?php /* f1-explode.php */
//  分割する文字列
$str = "東京,名古屋,京都,大阪";
//  分割処理
$arr = explode(",", $str);
//  配列の内容表示
echo "<pre>";
var_dump($arr);
echo "</pre>";
?>
これをブラウザで実行すると以下の表示になります。
array(4) {
  [0]=>
  string(6) "東京"
  [1]=>
  string(9) "名古屋"
  [2]=>
  string(6) "京都"
  [3]=>
  string(6) "大阪"
}
変数「$arr」に指標「0」から順にカンマで分割された文字列が設定されています。 
これ自体は特に問題は無いのですが explode 関数に渡す文字列が null または 空文字列(長さが 0 の文字列) の場合は どうなるのでしょうか。 
■nullをexplode関数で分解処理
それでは早速やってみます。上記のソースの文字列を null に変えます。
<?php
$str = null;
//  分割処理
$arr = explode(",", $str);
//  配列の内容表示
echo "<pre>";
var_dump($arr);
echo "</pre>";
?>
これをWindowsコマンドプロンプトで実行すると以下の表示になります。
array(1) {
  [0]=>
  string(0) ""
}
KEYが「0」で内容が空文字列の要素が「1件」の配列が返されます。 
なお null の部分を空文字列に変更しても同様の結果となります。
<?php
$str = "";
//  分割処理
$arr = explode(",", $str);
//  配列の内容表示
echo "<pre>";
var_dump($arr);
echo "</pre>";
?>
この結果から文字列に何かのデータが設定されていて、それを分解して使う場合、 null または 空文字列 だと1件の文字列が在ることになってしまいます。 
もし、それでもいいのならば問題にはならないのですが、 不都合であれば、分解処理の前に対象文字列を null または 空文字列 の判定を行って 別処理を行う必要があります。
PR
 
  
コメント