2009年8月21日金曜日

PHP で文字列の分割と結合

分割

文字列の分割は explode を使って、

print var_dump(explode(":", "hoge:piyo:fuga"));

結果は、

array(3) { [0]=>  string(4) "hoge" [1]=>  string(4) "piyo" [2]=>  string(4) "fuga" } 

explode の意味は、

1 〈火薬・タンクなどを〉爆発させる.

(Yahoo!辞書  より)

文字列を爆発させて分解するというイメージなのかな?

 

結合

文字列の結合は explode の反対 implode 。このネーミングは import <–> export のような対義語で忘れにくいかも。

print implode(":", array("hoge","piyo","fuga"));

結果は、

hoge:piyo:fuga

implode の意味は、

1 内側に破裂する.

(Yahoo!辞書 より)

「内側に破裂」ってどういうことかと思ったら、Implosion (mechanical process) - Wikipedia, the free encyclopedia によると、

An example of implosion is a submarine being crushed from the outside by the hydrostatic pressure of the surrounding water.

なるほど、潜水艦がぐしゃってなるようなやつか。つまり、配列をぎゅっとつぶして文字列にするということか。

 

エイリアス

それにしても、explode – implode って変った名前だなぁ。他の言語みたいに join – split にすればいいのにと思ったら、PHP: join – Manual に、

join — implode() のエイリアス

PHP: 関数エイリアスのリスト – Manual によると、

数はかなり少ないですが、PHPには複数の名前でコールされる関数があります。 いくつかの関数は単に二つの名前があり、実際の機能を持ちません。

split もあるけれど、PHP: split – Manual によると、

array split ( string $pattern , string $string [, int $limit ] )

string を、正規表現によって配列に分割します。

PHP: explode – Manual は、

array explode ( string $delimiter , string $string [, int $limit ] )

文字列の配列を返します。この配列の各要素は、 string を文字列 delimiter で区切った部分文字列となります。

explode の方は区切り文字が文字列に対して、split は正規表現なのでエイリアスではないと。