php - PHP:从序列化数组中删除整个数组的字符串计数
问题描述
我有一个 JSON 数组,我保存在 PHP 变量中。然后,我使用serialize($variable)
内置的 Wordpress 函数序列化该数组并将其保存到 dB update_post_meta()
。
我遇到的问题是整个序列化数组都用字符串计数包装。像这样,当前被保存为:
s:332:"a:2:{i:0;a:7:{s:4:"type";s:5:"weeks";s:4:"cost";s:1:"3";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"2";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"4";}i:1;a:7:{s:4:"type";s:7:"persons";s:4:"cost";s:1:"6";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"5";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"2";}}";
我需要在没有整个数组的字符串计数的情况下保存它。期望的输出:
a:2:{i:0;a:7:{s:4:"type";s:5:"weeks";s:4:"cost";s:1:"3";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"2";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"4";}i:1;a:7:{s:4:"type";s:7:"persons";s:4:"cost";s:1:"6";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"5";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"2";}};
一如既往,非常感谢您对此的任何帮助。
解决方案
似乎您的数组被序列化了两次,这就是为您提供附录的原因......我已经获取了您的序列化数据并对其进行了两次未序列化,并且它如您所愿返回:
<?php
$ser = 's:332:"a:2:{i:0;a:7:{s:4:"type";s:5:"weeks";s:4:"cost";s:1:"3";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"2";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"4";}i:1;a:7:{s:4:"type";s:7:"persons";s:4:"cost";s:1:"6";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"5";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"2";}}";';
$arr = unserialize($ser);
echo '<pre>';
print_r($arr); /* Print after one unserialize */
echo '<pre>';
print_r(unserialize($arr)); /* Print with unserialize to the once unserialized*/
将返回:
a:2:{i:0;a:7:{s:4:"type";s:5:"weeks";s:4:"cost";s:1:"3";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"2";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"4";}i:1;a:7:{s:4:"type";s:7:"persons";s:4:"cost";s:1:"6";s:8:"modifier";s:0:"";s:9:"base_cost";s:1:"5";s:13:"base_modifier";s:0:"";s:4:"from";s:1:"1";s:2:"to";s:1:"2";}}
Array
(
[0] => Array
(
[type] => weeks
[cost] => 3
[modifier] =>
[base_cost] => 2
[base_modifier] =>
[from] => 1
[to] => 4
)
[1] => Array
(
[type] => persons
[cost] => 6
[modifier] =>
[base_cost] => 5
[base_modifier] =>
[from] => 1
[to] => 2
)
)
正如您只能在两次反序列化后看到的那样,它返回到一个数组......所以只需执行一次,您就拥有了您需要的东西。
推荐阅读
- android - 如何获取当前日期并将其存储到 sqlite。之后将其绘制在 x 轴的图中?
- php - 按特定字段名从数据库中返回所有文件名
- mysql - MySQL连接三个查询而不增加记录
- java - 如何使用 JSF 和 Quarkus 显示自定义错误页面?
- typo3 - 无法覆盖 TYPO3 中的视图(部分、模板、布局)路径
- c# - 我如何找到具有 Y 轴偏移的对象的中心以找到顶面上的中心?
- sql - 即使值为 0,如何在查询中查看和显示总和
- c# - await PutObjectAsync(PutObjectAsync, CancellationToken) 是否真的在等待 AWS SDK for .NET 中的上传完成?
- flutter - Flutter bloc 的多个并发事件调用
- google-cloud-platform - 当我选择数据存储实体时,它会进入 Firestore,为什么?