プログラムを学んでいると、色々な耳にしない単語を聞くことも多いです。
シリアライズもその一つ。
今回は、PHPのシリアライズについて以下の内容でお話します。
【基本】シリアライズについて
【実践】シリアライズを行う
【実践】アンシリアライズを行う
わかりやすく解説しますので是非ご覧になってください。
シリアライズとは
シリアライズとは、配列などをそのまま配列として保存しておきたい場合などに使用します。
また、保存だけではなく送受信にも使えます。
通常、配列をデータベースに保存するとどうなるでしょうか。
試しにデータベースに以下の配列を登録してみてください。
["samurai1", "samurai2", "samurai3"]
そして、再度取得してみます。
結果 'Array("samurai1", "samurai2", "samurai3")'
取り出されたのは文字列です。
シリアライズを行わずにデータベースに登録後、再度取り出すと文字列となってしまいます。
この文字列をforeach文などで値を取り出すことは出来ません。
配列は、配列としてデータベースに登録する必要があるのです。
そのために必要なのがシリアライズなのです。
シリアライズをやってみよう
それでは、シリアライズを実際に行ってみましょう。
シリアライズを行うためにはserialize関数を使用します。
また、シリアライズするデータの型によって結果が変わります。
配列をシリアライズ
まずは配列のシリアライズです。
<?php $test = ["samurai1", "samurai2", "samurai3"]; $disp = serialize($test); echo $disp;
結果 a:3:{i:0;s:8:"samurai1";i:1;s:8:"samurai2";i:2;s:8:"samurai3";}
初めの【a:3】部分が【型:値】という形で表示される事に注目しましょう。
配列を表す型はaです。
また、それ以降の表示は配列データ部分となり、【キー;値;】で表されます。
整数をシリアライズ
続いて整数です。
<?php $test = 50; $disp = serialize($test); echo $disp;
結果 i:50;
整数を表す型はiです。
文字列をシリアライズ
最後に文字列です。
<?php $test = 'samurai'; $disp = serialize($test); echo $disp;
結果 s:7:"samurai";
文字列を表す型はsです。
文字列の場合は更に数字がついていますが、これはバイト数を表します。
シリアライズは簡単ですね。
そしてシリアライズをしたデータを送信したり、データベースに保存します。
unserializeでデータを戻そう
シリアライズしたデータを使うためにはそのままでは使えません。
unserializeを使用して、元の型や構造に戻す必要があります。
前章のサンプルデータを元に戻してみましょう。
配列をアンシリアライズ
まずは配列のアンシリアライズです。
<?php $test = ["samurai1", "samurai2", "samurai3"]; $disp = serialize($test); echo $disp; echo "<br />"; echo print_r(unserialize($disp));
シリアライズした$dispを表示、わかりやすいように改行(<br />)を入れました。
さらに、$dispをアンシリアライズして表示させました。
print_rは配列の中身を表示するために使用しています。
結果 a:3:{i:0;s:8:"samurai1";i:1;s:8:"samurai2";i:2;s:8:"samurai3";} Array ( [0] => samurai1 [1] => samurai2 [2] => samurai3 )1
一行目がシリアライズの結果、二行目がアンシリアライズの結果です。
元の配列に戻りました。
整数をアンシリアライズ
続いて整数です。
<?php $test = 50; $disp = serialize($test); echo $disp; echo "<br />"; echo unserialize($disp);
結果 i:50; 50
元の整数に戻りました。
文字列をアンシリアライズ
最後に文字列です。
<?php $test = 'samurai'; $disp = serialize($test); echo $disp; echo "<br />"; echo unserialize($disp);
結果 s:7:"samurai"; samurai
元の文字列に戻りました。
シリアライズしたデータを簡単に元に戻す事ができましたね。
まとめ
本日はPHPのシリアライズについてお話しました。
データ構造や型をそのまま保存できるのはとても便利ですので是非覚えておきましょう。
それでは、また。