微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

并非所有序列化数据都在输出

如何解决并非所有序列化数据都在输出

我正在尝试使用 wordpress 中的函数将序列化数据输出到使用 WP All Export 的电子表格中。它已成功对其进行反序列化,但在我需要的所需部分下缺少数据。

功能如下:

<?PHP
 function data_deserialize($value){
 $output = '';
 $data = maybe_unserialize($value);
 $data = $data[0];
 foreach ($data as $key => $value){
 $output .= $key.': '.$value.'
  ';
  }
 return $output;
 }
?>

以下序列化数据作为 $value 输出

a:1:{i:0;a:9:{s:16:"tmcp_post_fields";a:2:{s:12:"tmcp_radio_0";s:11:"Test Card_9";s:15:"tmcp_textarea_1";s:19:"This is the message";}s:10:"product_id";i:934;s:19:"per_product_pricing";b:1;s:17:"cpf_product_price";s:2:"15";s:12:"variation_id";s:4:"1030";s:11:"form_prefix";s:0:"";s:20:"tc_added_in_currency";s:3:"GBP";s:19:"tc_default_currency";s:3:"GBP";s:14:"tmcartepo_data";a:2:{i:0;a:2:{s:3:"key";s:11:"Test Card_9";s:9:"attribute";s:12:"tmcp_radio_0";}i:1;a:2:{s:3:"key";s:19:"This is the message";s:9:"attribute";s:15:"tmcp_textarea_1";}}}}

但是函数输出结果在电子表格中

 tmcp_post_fields: Array
 product_id: 934
 per_product_pricing: 1
 cpf_product_price: 15
 variation_id: 1030
 form_prefix: 
 tc_added_in_currency: GBP
 tc_default_currency: GBP
 tmcartepo_data: Array

如您所见,它缺少 tmcp_post_fields 下的数据,这实际上是我需要导出到电子表格的数据。

我缺少什么才能实现这一目标?

非常感谢

解决方法

由于 tmcp_post_fields 的值本身就是一个数组,因此您不能成功地将它附加到一个字符串中。这就是您获得 Array 作为值的原因。

您需要做的是在您的函数中添加一些额外的东西来处理循环中的 $value(如果它是一个数组)并将其转换为您可以附加的字符串。通过将循环移动到一个单独的函数中并使其递归(并对结果字符串中的一些额外格式进行小调整),我很快就创建了一些您可能可以使用的东西。不过,您可能希望调整该函数,以对自己有用的方式获取输出。

修改后的代码:

<?php
function data_deserialize($value) {
    $data = maybe_unserialize($value);
    $data = $data[0];

    return array_to_string($data);
}

function array_to_string($data,$indent = '') {
    $output = '';

    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $value = array_to_string($value,"{$indent}\t");
            $value = "[\n{$value}{$indent}]";
        }

        $output .= "{$indent}{$key}: {$value}\n";
    }

    return $output;
}

您提供的序列化数据的预期输出:

tmcp_post_fields: [
    tmcp_radio_0: Test Card_9
    tmcp_textarea_1: This is the message
]
product_id: 934
per_product_pricing: 1
cpf_product_price: 15
variation_id: 1030
form_prefix: 
tc_added_in_currency: GBP
tc_default_currency: GBP
tmcartepo_data: [
    0: [
        key: Test Card_9
        attribute: tmcp_radio_0
    ]
    1: [
        key: This is the message
        attribute: tmcp_textarea_1
    ]
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。