Php 将数据导出到XML-由于错误,未序列化数组失败

Php 将数据导出到XML-由于错误,未序列化数组失败,php,arrays,serialization,Php,Arrays,Serialization,我想使用WP All export将woocommerce数组“redq_day_ranges_cost”导出为XML格式。如果我尝试取消序列化数组,我会遇到以下PHP错误:unserialize():偏移量处的错误 我试过这里提到的东西: 问题是,由于这个错误,WP All Export在保存导出模板时已经失败了,所以我觉得在这里有点不知所措 这是要导出的数据: a:7:{ i:0;a:4 {s:8:"min_days";s:1:"1";s:8:"max_days";s:1:"1";s:10:

我想使用WP All export将woocommerce数组“redq_day_ranges_cost”导出为XML格式。如果我尝试取消序列化数组,我会遇到以下PHP错误:unserialize():偏移量处的错误

我试过这里提到的东西:

问题是,由于这个错误,WP All Export在保存导出模板时已经失败了,所以我觉得在这里有点不知所措

这是要导出的数据:

a:7:{
i:0;a:4
{s:8:"min_days";s:1:"1";s:8:"max_days";s:1:"1";s:10:"range_cost";s:2:"340";s:15:"cost_applicable";s:5:"fixed";}
i:1;a:4:
{s:8:"min_days";s:1:"2";s:8:"max_days";s:1:"2";s:10:"range_cost";s:2:"450";s:15:"cost_applicable";s:5:"fixed";}
i:2;a:4:
{s:8:"min_days";s:1:"3";s:8:"max_days";s:1:"3";s:10:"range_cost";s:2:"570";s:15:"cost_applicable";s:5:"fixed";}}
计划是把它出口到

<min_days>1</min_days>
<max_days>1</max_days>
<range_cost>340</range_cost>
<cost_applicable>fixed</cost_applicable>
1
1.
340
固定的
到目前为止,如果我在函数编辑器中调用unserialize,结果就是命名错误。如果我在XML编辑器中内联调用它,它将产生3行


Array

您的数据有两个问题,第一个问题是数据中有需要删除的换行符,第二个问题是某些字符串变量的长度不匹配。前者可以通过简单的
str_替换
来纠正;后者可以使用中的代码进行更正。此代码用于将字符串转换回数组:

$data = str_replace("\n", "", $data);
$fixed_data = preg_replace_callback ( '!s:(\d+):"(.*?)";!', function($match) {      
    return ($match[1] == strlen($match[2])) ? $match[0] : 's:' . strlen($match[2]) . ':"' . $match[2] . '";';
}, $data );

print_r(unserialize($fixed_data));
输出:

Array ( 
  [0] => Array (
    [min_days] => 1
    [max_days] => 1
    [range_cost] => 340
    [cost_applicable] => fixed
  )
  [1] => Array (
    [min_days] => 2
    [max_days] => 2
    [range_cost] => 450
    [cost_applicable] => fixed
  )
  [2] => Array (
    [min_days] => 3
    [max_days] => 3
    [range_cost] => 570
    [cost_applicable] => fixed
  )
)

我在这里添加了\n只是为了让它更具可读性。关于不匹配,我修正了,谢谢你的提醒。问题是,WP All Import的函数编辑器在保存“导出模板”时仍然失败,所以我想数据一定是出了什么问题。@achiever啊,对不起,我根本没有帮助。我建议在你的问题中加上wordpress标签,希望它能引起更多这方面知识的人的注意。但是,您不能在函数编辑器中对
unserialize
的调用中添加对
preg\u replace\u callback的调用吗?例如
unserialize(preg\u replace\u callback(…)
?不,这正是我需要弄清楚的。这不是代码或数据中的问题,它只是在保存XML模板时抛出一个错误。函数本身运行正常,我现在可以得到导出的数据。谢谢:)@achiever,只要你高兴。如果答案不能真正解决你问题中的问题,那就没有理由接受答案。我的再植长度不匹配,所以你解决了我的问题。;)