文字列を配列にシリアル化解除する必要があります.PHPで連想配列にシリアル化解除する必要がある文字列は次のとおりです。
a:1:{i:0;s:158:"a:6:{s:5:"rowid";s:32:"94ca9ee0c4e3184b50e89e82f80332fb";s:2:"id";
s:2:"68";s:3:"qty";s:1:"1";s:5:"price";
s:2:"20";s:4:"name";
s:5:"Bread";s:8:"subtotal";i:20;}";
}
文字列を配列にシリアル化解除する必要があります.PHPで連想配列にシリアル化解除する必要がある文字列は次のとおりです。
a:1:{i:0;s:158:"a:6:{s:5:"rowid";s:32:"94ca9ee0c4e3184b50e89e82f80332fb";s:2:"id";
s:2:"68";s:3:"qty";s:1:"1";s:5:"price";
s:2:"20";s:4:"name";
s:5:"Bread";s:8:"subtotal";i:20;}";
}
こちらは二重連載されているようです。単一の要素を持つ配列に展開され、その要素はシリアル化された連想配列です。したがって、次のことを行う必要があります。
$temp = unserialize($data);
$result = unserialize($temp[0]);
var_dump($result);
結果:
array(6) {
["rowid"]=>
string(32) "94ca9ee0c4e3184b50e89e82f80332fb"
["id"]=>
string(2) "68"
["qty"]=>
string(1) "1"
["price"]=>
string(2) "20"
["name"]=>
string(5) "Bread"
["subtotal"]=>
int(20)
}
最上位のシリアル化された配列に複数の要素が存在する可能性がある場合は、 を使用array_map
してそれらすべてを非シリアル化します。
$result = array_map('unserialize', $temp);
$result
2次元配列になります。
なぜこのようにデータを保存したのかわかりません。入れ子にするのではなく、元の 2 次元配列を一度にシリアル化してみませんか?