おサルさんでもわかる?ホームページ作り!
| htmlタグ辞典+css


◆Tip17 - 配列をそのまま(シリアライズ)保存する
配列の値をシリアライズして保存しておきたい場合があります。
シリアライズとは配列の形、値をそのまま保存できる仕組みのことで "serialize" 関数で保存し、"unserialize" 関数で読み込むことができます。
データベースに並び替えや検索する必要がない値の場合は、配列を文字列としてカラムに保存することができるのです。
通常はデータベースは 1 カラムにつき 1 つのデータを格納します。
例えばショッピングサイトを運営する場合、会員情報は次のようなものが考えられます。
- 氏 名
- よ み
- 性 別
- 年 齢
- 住 所
- 電話番号
- 携帯番号
この内容なら普通にカラムに値を入れてあげた方がデータベースとしては利用しやすいと思います。
この中で配列として保存したいとするなら、電話番号と携帯番号というところでしょうか・・・。
シリアライズして保存するとカラムは1つ減らすことができます。
しかしこれでは検索が出来なくなってしまいますのでどちらが便利か判断がつきますよね。
セッション情報などをシリアライズして使うことがあるそうです・・・。
では販売する商品について考えてみましょう。
商品情報としては次のようなものが考えられます。
商品、価格、個数については直接カラムに値を入れてあげた方がいいでしょう。
カテゴリは、例えば食べ物であれば「食品」と入れるところでしょうか?
しかしこれでは大まか過ぎますね・・・。
アイテム数が多くなれば細分化されたカテゴリに区別してあげた方が目的の商品が探しやすくなります。
工夫ができそうですね!
ショッピングサイトをご覧になるとわかると思いますが、商品カテゴリは大まかな区分、該当区分に分かれていることに気がつきます。
食品と本のカテゴリでイメージしてみました。
■カテゴリ
 ├ 食品
 │ ├ 肉、肉加工品
 │ ├ 魚介類・海産物
 │ ├ 野菜
 │ ├ 米・雑穀
 │ ├ 惣菜・調理品
 │ ├ フルーツ
 │ └ スイーツ・洋菓子
 └ 本
   ├ コミック、アニメ
   ├ 雑誌
   ├ 写真集
   ├ ビジネス、経済
   └ その他
このイメージを変数 "$cate" に配列してみると次のとおりになります。
$cate[0][0] = "食品";
$cate[0][1] = "肉、肉加工品";
$cate[0][2] = "食品-魚介類・海産物";
$cate[0][3] = "野菜";
$cate[0][4] = "米・雑穀";
$cate[0][5] = "惣菜・調理品";
$cate[0][6] = "フルーツ";
$cate[0][7] = "スイーツ・洋菓子";
$cate[1][0] = "本";
$cate[1][1] = "コミック、アニメ";
$cate[1][2] = "雑誌";
$cate[1][3] = "写真集";
$cate[1][4] = "ビジネス、経済";
$cate[1][5] = "文芸";
"$cate[*][0]" は大まかな区分であるところがミソです。
こうすることで例えば、
echo "[カテゴリ]<br />";
echo $cate[1][0]." - ".$cate[1][3];
とした場合、
[カテゴリ]
本 - 写真集
と書き出すことができます。
キーがそのままカテゴリを特定する数字になるので書き出しも簡単です。
この配列をシリアライズしてファイル名を "category.dat" として保存するには serialize 関数を使います。
ファイル拡張子は "txt"、"log" など任意のものでかまいません。
//配列の中身をファイルに保存
file_put_contents("category.dat", serialize($cate));
逆にシリアライズされたファイルを読み込むには、unserialize 関数を使います。
//配列をファイルから読み込み
$cateArray = unserialize(file_get_contents("category.dat"));
ではデータベースにカテゴリの情報を保存するようにするにはどうしたらよいでしょうか?
データベースに大まかなカテゴリと該当カテゴリのカラムを追加すればよいでしょう。
これで大まかなカテゴリ、該当カテゴリの分類ができますし、データベースでカテゴリ検索もできます。
では複数カテゴリの場合はどうでしょうか?
例えば、"ビジネスマンガ"の商品が存在するのなら本のカテゴリは "コミック、アニメ" と "ビジネス、経済" の二つのカテゴリになるでしょう。
複数カテゴリの場合にはそれに対応した仕組みを考えてあげます。
以下はそのカテゴリーのイメージです。
前者のイメージは、登録するカテゴリが増えれば増えるほどカテゴリのカラムを増やしていかなければなりません。
はじめから登録できるカテゴリ数を限定しておけばデータベースのカラムを追加する必要はないのですが、そうでなければ関連するプログラムの修正に手間を取られることになります。
後者はカテゴリのカラムは一つだけです。
このケースの場合、格納するカテゴリは制限なく格納することができます。
格納する値は、"1-1,1-4"、"1_1<>1_4" などと判別しやすい任意のものを入れておけば、データの呼び出しや加工もしやすくなるでしょう。
データベースと配列ファイルを分ければ便利に使えるのです。
工夫次第で配列ファイルは便利に使えるのです。

|