Как извлечь данные из сериализованного массива post meta?

27 мая 2011 г., 17:21:47
Просмотры: 62.5K
Голосов: 34

Я нашел скрипт декодера XML в WP, который сохраняет данные как массив в пользовательском поле meta. Какой лучший способ извлечь эту информацию?

Например, как я могу отобразить поле "Manufactured in" со значением "CANADA"?

[_ttn_i_details] => Array ( [0] => a:5:{s:9:"engine_id";a:1:{i:0;s:9:"300000225";}s:15:"transmission_id";a:1:{i:0;s:6:"257691";}s:5:"plant";a:1:{i:0;s:23:"Oshawa, Ontario, Canada";}s:15:"Manufactured in";a:1:{i:0;s:6:"CANADA";}s:22:"Production Seq. Number";a:1:{i:0;s:6:"151411";}} )

Пример кода выше был получен с помощью print_r(get_post_custom($post->ID));.

Буду благодарен за любую подсказку, даже самую маленькую. :)

1
Комментарии

Если вы собираетесь поставить минус вопросу, будьте хотя бы взрослыми и объясните почему. Я очень стараюсь изучать PHP. Для большинства программистов это может быть базовой вещью, но я пришёл из дизайна.

MTT MTT
27 мая 2011 г. 19:59:08
Все ответы на вопрос 2
3
50

Используйте функцию unserialize() для преобразования строки в массив.

$mydata = 'a:5:{s:9:"engine_id";a:1:{i:0;s:9:"300000225";}s:15:"transmission_id";a:1:{i:0;s:6:"257691";}s:5:"plant";a:1:{i:0;s:23:"Oshawa, Ontario, Canada";}s:15:"Manufactured in";a:1:{i:0;s:6:"CANADA";}s:22:"Production Seq. Number";a:1:{i:0;s:6:"151411";}}';
$mydata = unserialize($mydata);
echo $mydata['Manufactured in'][0];

Примечание - Связанная мысль - при хранении метаданных в сериализованном виде важно учитывать, что это может ограничить возможность использования этих данных в запросах, если это важно для вас. Например, будет не так просто написать запросы типа "показать все детали, произведенные в Канаде" или сортировать результаты по идентификатору двигателя, поскольку эти данные скрыты в одном поле вместе с другой информацией.

27 мая 2011 г. 17:34:46
Комментарии

@M.Taylor - пожалуйста, посмотрите моё дополнение о сериализованных данных и запросах, не уверен, что это важно в вашем случае, но может быть.

Milo Milo
27 мая 2011 г. 17:54:21

Вы правильно подметили насчёт потери возможности поиска по данным. Мне нужно разобраться, как не хранить их в сериализованном массиве, учитывая что я не писал этот скрипт.

MTT MTT
27 мая 2011 г. 18:07:50

@M.Taylor Нет, извините. Но уверен, кто-нибудь здесь сможет помочь.

Milo Milo
27 мая 2011 г. 18:32:33
0

Вы можете использовать этот кодекс WordPress, который преобразует данные в массив.

maybe_unserialize($data);

https://developer.wordpress.org/reference/functions/maybe_unserialize/

19 янв. 2021 г. 14:20:20