fetus Diary
2008/09/10(水) - 遠く遠くからネタを拾ってくる
PHPのsplit関数 | Selfkleptomaniac
ところが、納得できないのはこれだ。
$str = "a.b.c";
print_r(split(".", $str));
/* 全部空文字で返ってきたよ。。。
Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
)
*/
$ret = split(".", $str);
var_dump($ret);
/* 文字列だって言い張るんだよ。。。
array(6) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
[4]=>
string(0) ""
[5]=>
string(0) ""
}
*/直感的には、空の配列かFALSEが返ってくるような気がするのだが、こういうことらしい。ううむ。
むしろ今の PHP の実装通りにならないと困るっていうか、PHP がバカ正直というか…。
split の第一引数は正規表現だから "." だと「すべての文字でマッチング」になる。
'a/b/c' に対して '/' で split した場合に array('a', 'b', 'c') になるように、'/' はどこにも残らない。正規表現にマッチした前後で切り出すわけだから当たり前だけど。じゃあ、'.' で split をかけるとどうなるかというと全部の文字にマッチングするから 『<ここ>a<ここ>.<ここ>b<ここ>.<ここ>c<ここ>』…の<ここ>の部分が切り出され、それぞれ該当する部分は長さ 0 の文字列でなければならない。
つまり、要素数 6 ですべての要素が空文字列の配列ができるのは正常…に思えるんだけど……私なんか間違ってるんだろうか。
# そもそも第一引数に "." なんて指定する意味がないからしないけど。というか、個人的には単純なものは explode、複雑なものは preg_split 呼ぶから split に出番は無い…
- 08/09/10
21:3421:43
コメント
コメントはありません。