今回はPHPで配列を文字列に変換するimplode関数と、文字列を分割して配列に変換するexplode関数の使い方について解説します。
PHPに限らずプログラム開発の中で配列から文字列、文字列から配列に変換する場面は多くあります。今回は基本的なimplode関数とexplode関数の使い方を学んだ後に、使用例を簡単に説明したいと思います。ぜひ参考にしてください。
目次
implode関数による配列(Array)を文字列(String)にする
通常の配列の文字列化
implode関数は、配列の各要素を連結して文字列化することができます。以下の例では「,」(カンマ)を介して各要素を連結してくれます。
1 2 3 |
$array = array("北海道", "福島県", "東京都", "大阪府", "沖縄県"); $str = implode(",", $array); echo $str . "\n"; |
出力結果は以下の通りです。カンマで連結された文字列が出力されました。
1 |
北海道,福島県,東京都,大阪府,沖縄県 |
連想配列でimplode関数を使った場合は?
連想配列をimplode関数で連結するとどういう結果になるでしょうか。以下のように連想配列$arrayをimplode関数で連結を試みました。
1 2 3 |
$array = array("北海道"=>"札幌市", "福島県"=>"福島市", "東京都"=>"新宿区", "大阪府"=>"大阪市", "沖縄県"=>"那覇市"); $str = implode(",", $array); echo $str . "\n"; |
結果はご覧の通り。値だけが連結されます。
1 |
札幌市,福島市,新宿区,大阪市,那覇市 |
多重配列の場合は?
次に多重配列の場合はどうなるでしょうか。以下の例のように多重配列をimplode関数で連結を試みましょう。
1 2 3 4 5 6 7 |
$array = array( array("北海道", "青森県", "岩手県", "秋田県"), array("茨城県", "栃木県", "東京都", "神奈川県"), array("大阪府", "京都府", "奈良県", "滋賀県"), ); $str = implode(",", $array); echo $str . "\n"; |
残念ながらエラーが発生しました。要素が配列なので単純な連結はできないようです。
1 |
PHP Notice: Array to string conversion |
やり方としてはforループで要素を取り出し、その要素(配列)をimplode関数で連結します。
1 2 3 4 5 6 7 8 9 |
$array = array( array("北海道", "青森県", "岩手県", "秋田県"), array("茨城県", "栃木県", "東京都", "神奈川県"), array("大阪府", "京都府", "奈良県", "滋賀県"), ); foreach($array as $a){ $str = implode(",", $a); echo $str . "\n"; } |
ご覧の通りの要素ごとに文字列化して出力しました。多重配列の場合は一気には文字列化できずループ処理を使って処理していきましょう。
1 2 3 |
北海道,青森県,岩手県,秋田県 茨城県,栃木県,東京都,神奈川県 大阪府,京都府,奈良県,滋賀県 |
explode関数による文字列を分割(String)して配列(Array)にする
今度は逆に文字列を配列に変換する方法です。配列に変換するにあたっては分割したい箇所に区切り文字が入っていることが前提となります。
以下のように$str変数のはカンマ区切りで構成された県名データが格納されています。explode関数によって区切り文字としてカンマを指定することで分割して配列化させることができます。
1 2 3 |
$str = "北海道,福島県,東京都,大阪府,沖縄県"; $array = explode(',', $str); print_r($array); |
出力結果は以下のとおりです。カンマで分割され配列化されました。
1 2 3 4 5 6 7 8 |
Array ( [0] => 北海道 [1] => 福島県 [2] => 東京都 [3] => 大阪府 [4] => 沖縄県 ) |
ファイルの入出力の際の使用例
配列から文字列に、文字列から配列に変換する基本を押さえたところで、少し実践的な内容に触れてみたいと思います。
配列⇔文字列変換で最もよく使うケースの1つにファイルの入出力における処理があります。csvファイルなどを扱う場合は、ファイルから読み込んだ状態ではカンマ区切りの文字列でしかありませんが、プログラム処理の中ではそれを配列化した方が効率的です。逆に配列データをcsvファイルに書き込む場合はカンマ区切りで連結する必要があります。
csvファイルの中身が以下のようなデータで、file.csvというファイル名で保存されていると仮定して配列⇔文字列変換をやってみましょう。
1 2 3 4 |
北海道,青森県,岩手県,秋田県 茨城県,栃木県,東京都,神奈川県 大阪府,京都府,奈良県,滋賀県 福岡県,熊本県,大分県,鹿児島県 |
csvファイルを読み込んで配列化する
こちらがcsvファイルからデータを読み込み多重配列化するプログラム例です。1行ごとに読み込んでカンマで分割して配列化しています。更にその配列を別の配列の最後に追加することで多重配列化させています。
1 2 3 4 5 6 7 8 9 10 |
$data = array(); $fp = fopen('file.csv', 'r'); while ($line = fgets($fp)) { $array = explode(',', $line); $data[] = $array; } fclose($fp); print_r($data); |
出力結果はご覧の通り。csvファイルを多重配列に変換することができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
( [0] => Array ( [0] => 北海道 [1] => 青森県 [2] => 岩手県 [3] => 秋田県 ) [1] => Array ( [0] => 茨城県 [1] => 栃木県 [2] => 東京都 [3] => 神奈川県 ) [2] => Array ( [0] => 大阪府 [1] => 京都府 [2] => 奈良県 [3] => 滋賀県 ) [3] => Array ( [0] => 福岡県 [1] => 熊本県 [2] => 大分県 [3] => 鹿児島県 ) ) |
これの良いところは、csvファイルをExcelのように行列で指定することができる点です。以下の例は2行目3列目を参照しています。※Excelと違って1行目(または1列目)のインデックスが0になります。
1 2 3 |
echo $data[1][2]; //出力結果 //東京都 |
このようにcsvファイルの内容を配列化することで、その後の処理が非常に楽になるわけですね。
配列をcsvファイルに書き込む
今度は、上の例でcsvファイルを配列化したものを再度ファイルに保存してみましょう。
以下のようにループ処理で要素(配列)を取り出し、implode関数でカンマを介して連結したものを1行としてファイルに書き込んでいます。
1 2 3 4 5 |
$fp = fopen('file.csv', 'w'); foreach($data as $array){ fwrite($fp, implode(",", $array)); } fclose($fp); |
上記を実行するとcsvファイルが生成されます。
まとめ
いかがでしょうか。今回はPHPで配列を文字列に変換するimplode関数と、文字列を分割して配列に変換するexplode関数の使い方、また実践例としてcsvファイルの入出力での使い方について解説しました。
PHPに限らず配列と文字列との変換はいろいろな場面で必要になります。ぜひ参考にしてください。