[PHP] implode()で配列の要素を文字列として連結

公開

スポンサーリンク

implode()は配列の要素を文字列として結合する関数です。第1引数に区切り文字を指定し、第2引数に配列を与えると、要素を区切り文字を間に挟んで連結した文字列を返します。

$arr = array("foo", "bar");
echo implode(",", $arr );//foo,bar

推奨されない書き方

区切り文字を指定せず、配列だけを与えても結合してくれます。

$arr = array("foo", "bar");
echo implode( $arr );//foobar

しかし、これは推奨されていない書き方です。区切りが必要ない場合の正しい書き方はこうです。

$arr = array("foo", "bar");
echo implode("", $arr );//foobar

このように2通りの書き方が存在するのは、PHP4.2以前ではimplode()に区切り文字の指定がなかったことによるもので、引数を一つしか与えない書き方はすべきではありません。PHPがバージョンアップした時、引数一つの書き方が廃止されることもありえなくはないので、きちんと第1引数に区切り文字、第2引数に配列を与えるようにしましょう。

要素が文字列でない配列を与えるとどうなるか

要素がint型の配列を与えた場合。

$arr = array(1, 2, 3);
echo implode("", $arr );//123

文字列として結合されます。

2次元配列を与えると・・・、

$a = array(
 array("foo","bar"),
 array("hoge","hoge")
);
echo implode("", $arr );//Notice: Array to string conversion in...
Noticeレベルのエラーになります。

連想配列でもOK

$arr = array( "key1" => "foo", "key2" => "bar" );
echo implode(",", $arr );//foo,bar

連想配列でも結合は普通に行われます。

おまけ

私はその昔、配列の要素を結合するときにいちいちfor文を書いていたという悲しい思い出がありまして、どういうことをしていたかというと毎回こんな文を書いていたのです。

$params = array("foo", "bar" ,"hoge" );
$str = "";
for($i=0;$i<count($params);$i++){
 $str .= $params[$i] . ",";
}
$str = mb_substr( $str , 0 , mb_strlen( $str )-1 );

上記の内容はもちろんimplode(",",$params)の1行で済むわけです。それをみっともなくぐちゃぐちゃと5行も書いて・・・。implode()の使い方に気づいたときは涙を流しましたね。悲劇と言わざるをえない。

スポンサーリンク


Comment