PHPのシリアライズを知ろう!便利な使い方徹底解説

プログラムを学んでいると、色々な耳にしない単語を聞くことも多いです。

シリアライズもその一つ。

今回は、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のシリアライズについてお話しました。

データ構造や型をそのまま保存できるのはとても便利ですので是非覚えておきましょう。

それでは、また。

プログラミング学習を効率良く進めたいなら…

学習を始めたけどエラーが解決できない
作りたいものはあるけど、何から始めればいいかわからない
プログラミングに対して、このような悩みを持っている方も多いですよね。

そんな方には、弊社が運営するサブスク型のプログラミングスクール「SAMURAI ENGINEER Plus+がおすすめです。



月額2980円(税別)で、主に4つのサービスを提供させていただきます。

  • 現役エンジニアによる月1度の「マンツーマン指導」
  • 平均回答時間30分の「Q&Aサービス」
  • 作りながら学べる28種類の「教材」
  • 学習を記録&仲間と共有できる「学習ログ」

目的にあった教材を選べば、どなたでも効率よく学習できるほか、Q&Aサービスやマンツーマン指導を活用することで、挫折せずにプログラミングの習得が可能です。

プログラミングを効率的に学びたい人はもちろん、何から始めたらよいのかわからない方は、ぜひ「SAMURAI ENGINEER Plus+」をご利用ください。
まずは30日無料体験

書いた人

つぶらや

独学PG&SE、東京在住30代女性。
誰でもプログラマーになれるがモットーで、わかりやすい記事を目指しています。