作为WordPress选项的结果我得到了以下详细信息作为结果。我不知道如何从下面的代码中获得有意义的结果(数组)。这可以用字符串解析吗?
a:6:{s:14:"street_address";s:9:"Add_line1";s:15:"street_address2";s:10:"Add_line_2";s:9:"city_name";s:5:"cityname";s:5:"state";s:7:"statename";s:3:"zip";s:6:"999999";s:14:"country_select";s:2:"IN";}
答案 0 :(得分:1)
通常您只需使用unserialize()
功能。
$result = unserialize($your_serialized_string);
但是,在seralized字符串中存在错误,因此函数返回false并且日志中出现错误。
PHP Notice: unserialize(): Error at offset 110 of 198 bytes in [...]
当我在不使用函数unserialize()
和serialize()
的情况下直接修改存储在数据库中的字符串时,我遇到了这个问题,因为序列化函数在数组的前面添加了值的长度& #39; s:14:" street_address"',其中14是' street_address'的长度,因此直接编辑您必须编辑您编辑的字符串的长度值。
您发布的序列化字符串有两个错误的值。
我用以下代码解决了这个问题,它自动在字符串中重新生成错误的长度值:
<?php
@$result = unserialize($your_serialized_string);
if(!$result){
// UNSERIALIZE OFFSET ERROR
$result_temp = preg_replace_callback('!s:(\d+):"(.*?)";!',
function($match){
return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
},
$your_serialized_string);
$result = unserialize($result_temp);
}
var_dump($result);
echo $result['street_address'];
?>
然后您可以使用关联数组语法
访问数组$result['street_address']
或喜欢对象
$result = (object) $result;
$result->street_address