десериализовать массив - PullRequest
       5

десериализовать массив

0 голосов
/ 04 февраля 2012

Я возвращаю сериализованный массив из мета-поля post в wordpress под названием groups.

Вот как выглядит мета-поле для публикации.

a:2:{i:0;s:1:"1";i:1;s:1:"2";}

как я могу выполнить цикл через это и выполнить оператор if, т.е.

$mydata = unserialize($meta['groups']);

print_r($mydata);

Несериализированный не работает для меня, результат, который я получаю от print_r ниже

a:2:{i:0;s:1:"1";i:1;s:1:"2";}

То же самое, что и выше.

Любая помощь по работе с сериализованными и не сериализованными массивами, которые никогда не использовались ранее.

Ответы [ 3 ]

1 голос
/ 04 февраля 2012

Вероятно magic_quotes активно. Удалите созданные им косые черты с помощью stripslashes:

$mydata = unserialize(stripslashes($meta['groups']));

Если вы хотите убрать косые черты из всего массива GPC, используйте это (Кредиты переходят на этот комментарий на PHP.net):

if (get_magic_quotes_gpc()) {
      $strip_slashes_deep = function ($value) use (&$strip_slashes_deep) {
          return is_array($value) ? array_map($strip_slashes_deep, $value) : stripslashes($value);
      };
      $_GET = array_map($strip_slashes_deep, $_GET);
      $_POST = array_map($strip_slashes_deep, $_POST);
      $_COOKIE = array_map($strip_slashes_deep, $_COOKIE);
  }
0 голосов
/ 04 февраля 2012
print_r(unserialize('a:2:{i:0;s:1:"1";i:1;s:1:"2";}'));

напечатает

Array
(
    [0] => 1
    [1] => 2
)

Десериализация работает просто отлично.Как узнать, содержит ли $meta['groups'] то, что вы хотите?

0 голосов
/ 04 февраля 2012

Вот что я получил с помощью командной строки PHP:

php > $x = unserialize('a:2:{i:0;s:1:"1";i:1;s:1:"2";}');
php > print_r($x);
Array
(
    [0] => 1
    [1] => 2
)

Кажется, что $meta['groups'] не содержит сериализованную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...