首页 > 解决方案 > 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";}};

一如既往,非常感谢您对此的任何帮助。

标签: phparrayswordpressupdate-post-meta

解决方案


似乎您的数组被序列化了两次,这就是为您提供附录的原因......我已经获取了您的序列化数据并对其进行了两次未序列化,并且它如您所愿返回:

<?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
        )

)

正如您只能在两次反序列化后看到的那样,它返回到一个数组......所以只需执行一次,您就拥有了您需要的东西。


推荐阅读