0

私はデータベースに値をシリアライズしており、データベースから値をフェッチしてから取得します

<pre>
print_r($DataValues)
</pre>

それは私にこのように価値を示します

[0] => stdClass Object
    (
        [categories] => a:1:{i:38;s:21:"Summer Market Session";}
    )

[1] => stdClass Object
    (
        [categories] => a:1:{i:38;s:21:"Summer Market Session";}
    )

[2] => stdClass Object
    (
        [categories] => a:2:{i:38;s:21:"Summer Market Session";i:39;s:21:"Autumn Market Session";}
    )

アンシリアライズして値だけ取得したいのですが、アンシリアライズしようとしましたが、ブール値が false で表示されます

&各値を実行した後に値を出力しようとすると、以下のエラーが表示されます

キャッチ可能な致命的なエラー: クラス stdClass のオブジェクトを文字列に変換できませんでした

これを行う方法がわかりません。私が知っているすべての非シリアル化戦術を試していました。また、foreachループを使用して配列に値を保存しようとしましたが、失敗しました..

シリアル化を解除した後、どうすれば値を取得できますか...??

4

1 に答える 1

2

まあ、どういうわけか私はまだ問題を見ることができません。これを使用して、DB から取得したと思われるデータ構造を再構築しました。

$testObject             = new stdClass();
$testCategories         = array(38 => 'Summer Market Session');
$testObject->categories = serialize($testCategories);

$anotherTestObject             = new stdClass();
$anotherTestCategories         = $testCategories;
$anotherTestCategories[]       = 'Autumn Market Session';
$anotherTestObject->categories = serialize($anotherTestCategories);

$dataValues = array(
  $testObject, clone $testObject, $anotherTestObject
);

print_r($dataValues);

質問で引用したのと同じ出力が得られたので、それは正しい再構築だと思います。このデータをアンラップするには、単純なループで十分です。

foreach ($dataValues as $dataElement) {
  $categories = unserialize($dataElement->categories);
  print_r($categories);
}

それとも私は何か間違ったことをしていますか?

とにかく、これをすべてチェックするためのサンドボックスがあります。

于 2012-06-20T19:25:26.653 に答える