并非所有序列化数据都被输出
Not all serialised data is being outputted
我正在尝试使用 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
]
]
我正在尝试使用 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
]
]