シリアライズされた文字列を再帰的に解除する

3747 Views
PHP
シリアライズされた文字列を再帰的に解除する

PHPを利用しデータベースに配列を保存したいときに、シリアライズ(serialize)を行うことがあるかと思います。
ただの配列をシリアライズして保存し、アンシリアライズするのは簡単ですが、連想配列や多次元連想配列などをシリアライズした時はアンシリアライズするのが一苦労!

そんなときに使えそうな関数を作ったので紹介です。

SNSでシェア♪

スポンサーリンク

目次

以下の関数をコピペ!

 

//再帰的にシリアライズを解除
function unserializeRepeater($s) {
	if (@unserialize($s) !== false) {
		//シリアライズ解除が可能な場合
		return is_array($u = unserialize($s)) ? $u : unserializeRepeater($u);
	} else {
		//送られてきた文字列がシリアライズされていない場合
		return $s;
	}
}

利用方法は

 

<?php
$str1 = 's:150:"a:9:{i:0;s:5:"32380";i:1;s:5:"32372";i:2;s:5:"32376";i:3;s:5:"32377";i:4;s:5:"32374";i:5;s:5:"32373";i:6;s:5:"32378";i:7;s:5:"32375";i:8;s:5:"32379";}";';
$str2 = '';


$unserialize1 = unserializeRepeater($str1);
$unserialize2 = unserializeRepeater($str2);

var_dump($unserialize1);
var_dump($unserialize2);

/*
array(9) {
  [0]=>
  string(5) "32380"
  [1]=>
  string(5) "32372"
  [2]=>
  string(5) "32376"
  [3]=>
  string(5) "32377"
  [4]=>
  string(5) "32374"
  [5]=>
  string(5) "32373"
  [6]=>
  string(5) "32378"
  [7]=>
  string(5) "32375"
  [8]=>
  string(5) "32379"
}
string(0) ""
*/

になります。

シリアライズされていない文字列を入れた場合は引数に入れた文字がそのまま返されます。
アンシリアライズ可能な文字の場合は配列になって返ってきます。

 

まとめ

これでシリアライズが一気に使いやすくなりました!
ただし、データベースの容量を使いすぎることもあるので、シリアライズせずに保存できるものはしないように気をつけましょう。

SNSでシェア♪

スポンサーリンク

関連記事