我有一个包含类似于以下示例的序列化数据的数组。
Array
(
[0] => Array
(
[id] => 4
[data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}}
[created] => 2009-10-12 18:45:35
)
[1] => Array
(
[id] => 3
[data] => a:2:{s:6:"Series";a:1:{s:11:"description";s:11:"hello world";}s:4:"Type";a:1:{i:0;s:1:"1";}}
[created] => 2009-10-12 17:39:41
)
...
)
什么是反序列化数据键值并用其内容替换序列化数据的最佳方法?
我已经尝试使用引用进行循环,尽管数组中的最后两个条目不应该是相同的,但它可以正常工作。
foreach($data as &$item) {
$item['data'] = unserialize($item['data']);
}
答案 0 :(得分:3)
在foreach
循环中使用引用可以引入难以跟踪和神秘的行为。您应该使用简单的for
- 循环。
$num = count($data);
for ($i = 0; $i < $num; $i++)
{
$item[$i]['data'] = unserialize($item[$i]['data']);
}
答案 1 :(得分:1)
另一种方式:
foreach ($data as $key => $item) {
$data[$key]['data'] = unserialize($item['data']);
}
或者:
foreach ($data as $item) {
$item['data'] = unserialize($item['data']);
$data[] = $item;
}
$data = array_slice($data, count($data)/2);
答案 2 :(得分:0)
这样的事情会起作用:
$data2 = array ();
foreach($data as $item) {
$item['data'] = unserialize($item['data']);
$data2[] = $item;
}
如果您不想使用其他阵列:
foreach($data as $k => $item) {
$data[$k]['data'] = unserialize($item['data']);
}