我有一个来自Drupal的序列化数据字段,我无法弄清楚如何正确解析。这是序列化数据的一个示例:
module.exports = makeBig;
我已经走到了这一步:
a:10:{s:7:"contact";s:1:"1";s:19:"profile_affiliation";s:23:"The Learning Tree, Inc.";s:18:"profile_first_name";s:3:"Ben";s:22:"profile_street_address";s:19:"8718 Terrell Ct. S.";s:12:"profile_city";s:6:"Mobile";s:13:"profile_state";s:2:"AL";s:15:"profile_country";s:3:"USA";s:15:"profile_zipcode";s:5:"36695";s:18:"profile_home_phone";s:10:"2516494420";s:17:"profile_last_name";s:6:"Rogers";}
这不按预期工作。我收到这些错误:
$data = serializeddata;
$var = unserialize($data);
foreach ($var as $value) {
echo $value['profile_first_name'];
}
也许我需要做更多的工作来解析反序列化的数据,这样我就可以按名称获取每个值。任何帮助表示赞赏!
答案 0 :(得分:0)
$data = serializeddata;
$var = unserialize($data);
foreach ($var as $value) {
echo $value['contact'];
}
答案 1 :(得分:0)
检查此代码。它会工作,你的序列化数据格式不好。所以在这种情况下你的代码不起作用 首先,您的序列化数据格式需要更新
$seriliaze = 'a: 7:{s: 7:"contact";i: 1;s: 18:"profile_first_name";s: 5:"John";s: 17:"profile_last_name";s: 6:"Smith";}';
到
$seriliaze = 'a:5:{i:1;s:7:"contact";i:2;s:18:"profile_first_name";i:3;s:4:"John";i:4;s:17:"profile_last_name";i:5;s:5:"Smith";}';
然后部分替换
1. a: 7 -> a:5 // cause total 5 data
2. add index for every section like i:1;s:7:"contact";
3. s: 5:"John"; -> s:4:"John"; // cause 4 length
4. s: 6:"Smith"; -> s:5:"Smith"; // cause 5 length
在此部分更新后,您的代码将起作用,请立即检查
<?php
$seriliaze = 'a:5:{i:1;s:7:"contact";i:2;s:18:"profile_first_name";i:3;s:4:"John";i:4;s:17:"profile_last_name";i:5;s:5:"Smith";}';
$unserialize = unserialize($seriliaze);
echo "<pre>";
print_r($unserialize);
然后输出:
Array
(
[1] => contact
[2] => profile_first_name
[3] => John
[4] => profile_last_name
[5] => Smith
)
如果您获得数据,请使用此代码
$i = 0;
$j = 0;
$format_value = '';
foreach ($unserialize as $value) {
$i++;
if($i == 1){
continue;
}
if($j < 2){
$j++;
if($j == 1 ){
$format_value .= $value.' : ';
} else {
$format_value .= $value;
}
}
if( $j== 2){
$j =0;
echo $format_value;
$format_value = '';
echo "<br>";
}
}
然后输出:
profile_first_name : John
profile_last_name : Smith
答案 2 :(得分:0)
我能够在一些帮助下找到这个。问题是您需要在解析之前先修复数据。
$fixed = preg_replace_callback(
'/s:([0-9]+):\"(.*?)\";/',
function ($matches) { return "s:".strlen($matches[2]).':"'.$matches[2].'";'; },
$data
);
$original_array=unserialize($fixed);
然后你可以解析出来:
foreach ($original_array as $key => $value) {
echo $key .": ". $value;
};