人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで、何段階もシリアライズされている可能性のあるデータ(連想記憶配列)を復元する便利な方法はありませんか?(連想記憶配列も次元が深くなっている)
バージョンは4以降で、依存があるようならマイナーバージョンも教えてください。
ただし5は対象外とさせていただきます。

●質問者: P-mako
●カテゴリ:インターネット ウェブ制作
✍キーワード:PHP いただきます シリアライズ データ バージョン
○ 状態 :終了
└ 回答数 : 1/2件

▽最新の回答へ

1 ● sphire
●60ポイント

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

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));
◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ