PHPで、何段階もシリアライズされている可能性のあるデータ(連想記憶配列)を復元する便利な方法はありませんか?(連想記憶配列も次元が深くなっている)

バージョンは4以降で、依存があるようならマイナーバージョンも教えてください。
ただし5は対象外とさせていただきます。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2006/09/14 03:41:04
  • 終了:2006/09/21 03:45:03

回答(2件)

id:sphire No.1

sphire回答回数115ベストアンサー獲得回数122006/09/14 09:08:40

ポイント60pt

再帰を使った関数で解決しませんか?

http://jp.php.net/manual/ja/function.serialize.php のUser Contributed Notesに書かれている、serializeされた文字列のフォーマットを参考にして判別する方法もありますが、間違いなくserializeされた変数だと言うことであれば、これで充分です。

ただ、ふつうの文字列を与えると、バグるかなぁ…

function unserialize_r($s){
	return is_array($u = unserialize($s)) ? $u : unserialize_r($u);
}

以下テスト:

//深い配列を作る
$a = array(1,2,3);
$a = array($a, 1,2,3);
$a = array($a, 1,2,3);
$a = array($a, 1,2,3);
$a = array($a, 1,2,3);
print_r($a);
echo '<hr>';

//複数回serializeする
for($i = 0; $i < mt_rand(3,10); $i ++){
	$a = serialize($a);
}
print_r($a);
echo '<hr>';

//再帰的unserialize
print_r(unserialize_r($a));
id:P-mako

ご回答ありがとうございます。

リカーシブルな関数は必要だと思いますが、(配列でいう)is_arrayのようにserializeされているか判定しつつ展開するようなシンプルな方法がないものかと。

自前でフォーマットを見るしかないんでしょうか?

頭だけチェックすればある程度はカバーできますが、なるべく労力かけずに精度も上げたいという欲なんですが・・・

2006/09/14 10:52:52

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 こいほげ 7 2 1 2006-09-16 04:17:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません