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

23

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

Например, как можно отобразить поле «Произведено в» как «КАНАДА»?

[_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));.

Я действительно ценю любое понимание, независимо от того, насколько маленьким. :)

м-Torin
источник
1
Если вы собираетесь проголосовать за вопрос, хотя бы будьте достаточно взрослым, чтобы сказать почему. Я очень стараюсь выучить php. Это может быть основной вещью для большинства программистов, но я имею опыт проектирования.
м-торин

Ответы:

35

Используйте 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];

Редактирование - связанная мысль - что следует иметь в виду при хранении сериализованных метаданных, так это то, что вы ограничиваете свою возможность использовать эти данные в запросах, если это вас беспокоит. например, не так просто написать запросы типа «покажи мне все детали, изготовленные в Канаде» или упорядочить результаты по идентификатору двигателя, так как эти данные спрятаны с кучей других данных в одном поле.

Milo
источник
@ M.Taylor - пожалуйста, проверьте редактирование, которое я добавил о сериализованных данных и запросах, не уверен, что это беспокоит вас, но это может быть.
Майло
Вы замечаете, что теряете возможность поиска данных. Мне нужно разобраться, как не хранить его в сериализованном массиве, учитывая, что я не писал сценарий.
м-торин
@ M.Taylor Не знаю, прости. Я уверен, что кто-то здесь может помочь, хотя.
Майло