PHP: удаление количества строк всего массива из сериализованного массива

У меня есть массив JSON, который я сохраняю в переменной PHP. Затем я сериализую этот массив, используя serialize($variable) и сохранив его в дБ с помощью встроенной функции Wordpress 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";}};

Любая помощь в этом, как всегда, приветствуется.

1 ответ

Решение

Кажется, что ваш массив сериализуется дважды, и это дает вам дополнение ... Я взял ваши сериализованные данные и дважды не сериализовал их, и он вернулся, как вы хотели:

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

)

Как вы можете видеть, только после двух десериализаций он возвращается обратно в массив ... так что просто сделайте один, и у вас будет то, что вам нужно.

Другие вопросы по тегам