今回はPHPで連想配列をさまざまな形式で文字列化する方法について紹介します。
一般的に配列を文字列化する場合はカンマなどの区切り文字を指定して連結する方法を取ります。PHPでもそのような関数は用意されていますが、欠点として連想配列のキーを含めた文字列化ができないという点です。これに対してPHPでは連想配列をさまざまざ形式で文字列化する機能が用意されています。それらを駆使することで効率的なプログラム開発が可能となります。ぜひ参考にしてください。
目次
連想配列から生成する文字列形式について(Array to String)
今回、連想配列から生成する文字列の形式は以下の4パターンです。
- クエリ文字列(URLパラメーター)
- JSON 形式
- 値の保存可能な文字列形式
- データ構造をそのまま文字列化
PHPでは、それぞれに専用の関数が用意されていて特別な処理をすることなくたった1行で変換できます。
各関数では以下の配列を使って説明していきます。連想配列であり最後の要素が配列となっている多重配列でもあります。このような複雑な配列を一発で文字列変換してくれる関数が用意されているわけです。
1 2 3 4 5 |
$array = array("id"=>"user01", "name"=>"suzuki", "age"=>33, "action"=>array("1/10"=>"Tokyo","1/11"=>"Fukuoka","1/12"=>"Osaka") ); |
http_build_query関数によるクエリ文字列の生成
連想配列をクエリ文字列(URLパラメーター)に変換する場合はhttp_build_query関数を使います。引数に連想配列を渡すとクエリ文字列が帰ってきます。
1 2 |
$http = http_build_query($array); echo $http. "\n"; |
結果はご覧の通りです。これをURLの後ろに&を介して連結すればGET送信できるわけです。
1 |
id=user01&name=suzuki&age=33&action%5B1%2F10%5D=Tokyo&action%5B1%2F11%5D=Fukuoka&action%5B1%2F12%5D=Osaka |
クエリ文字列を連想配列に戻る際はparse_str関数を使います。第一引数にクエリ文字列を渡し、第二引数の変数にパースされた連想配列を受け取ることができます。
1 2 |
kparse_str($http, $array2); print_r($array2); |
結果はご覧の通り。劣化することなく連想配列にパースすることができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [id] => user01 [name] => suzuki [age] => 33 [action] => Array ( [1/10] => Tokyo [1/11] => Fukuoka [1/12] => Osaka ) ) |
json_encode関数による JSON 文字列の生成
連想配列を JSON 形式の文字列に変換する場合はjson_encode関数を使います。引数に連想配列を渡すとJSON 形式の文字列が帰ってきます。
1 2 |
$json = json_encode($array); echo $json. "\n"; |
結果はご覧の通りです。
1 |
{"id":"user01","name":"suzuki","age":33,"action":{"1\/10":"Tokyo","1\/11":"Fukuoka","1\/12":"Osaka"}} |
JSON形式の文字列を連想配列に変換する場合はjson_decode関数を使います。第一引数にデコードしたい json 文字列を入れ、第二引数にtrueを渡します。(falseにすると返ってくるのは連想配列ではなくObject型)
1 2 |
$array2 = json_decode($json, true); print_r($array2); |
結果は以下の通り連想配列となって返ってきました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [id] => user01 [name] => suzuki [age] => 33 [action] => Array ( [1/10] => Tokyo [1/11] => Fukuoka [1/12] => Osaka ) ) |
serialize関数による値の保存可能な文字列を生成
serialize関数によって値の保存可能な文字列を生成することができます。値の保存可能な文字列とはキーや値だけでなく型情報も保持してくれる文字列形式で、データベースへ渡す際に便利な形式です。
引数に連想配列を渡すと文字列が帰ってきます。
1 2 |
$serial = serialize($array); echo $serial. "\n"; |
結果はご覧の通り。ちなみに「a」は配列を示し、「s」はString型、「i」はInteger型を示しており、型情報を保持してくれていることがわかります。
1 |
a:4:{s:2:"id";s:6:"user01";s:4:"name";s:6:"suzuki";s:3:"age";i:33;s:6:"action";a:3:{s:4:"1/10";s:5:"Tokyo";s:4:"1/11";s:7:"Fukuoka";s:4:"1/12";s:5:"Osaka";}} |
逆に連想配列に変換する場合はunserialize関数を使います。
1 2 |
$array2 = unserialize($serial); print_r($array2); |
以下の通り連想配列に戻りました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Array ( [id] => user01 [name] => suzuki [age] => 33 [action] => Array ( [1/10] => Tokyo [1/11] => Fukuoka [1/12] => Osaka ) ) |
var_export関数によるデータ構造をそのまま文字列を生成
最後にvar_export関数の紹介です。データ構造をそのまま文字列にしてくれます。
第一引数に配列変数を、第二引数はtrueを渡します。
1 2 |
$export = var_export($array, true); echo $export. "\n"; |
結果は以下の通り。配列の内容がそのまま文字列化しました。これを一体何に使うのかと言うと例えば結果をログに保存する際に利用できます。結果をそのまま出力する関数としてvar_dump関数が一般的ですがログ出力に不向きなのでそのような場合はvar_export関数を使うケースが多いようです。
1 2 3 4 5 6 7 8 9 10 11 |
array ( 'id' => 'user01', 'name' => 'suzuki', 'age' => 33, 'action' => array ( '1/10' => 'Tokyo', '1/11' => 'Fukuoka', '1/12' => 'Osaka', ), ) |
残念ながらvar_export関数で生成した文字列を元に戻す関数は存在しません。
まとめ
いかがでしょうか。今回はPHPで連想配列をさまざまな形式で文字列化する方法について紹介しました。
PHPでは連想配列をさまざまざ形式で文字列化する機能が用意されていることがおわかりいただけたかと思います。それらを駆使することで効率的なプログラム開発が可能となります。ぜひ参考にしてください。