Jak wyodrębnić dane z szeregowanej szeregowo meta?

23

Znalazłem skrypt dekodujący XML na WP, który przechowuje dane jako tablicę w niestandardowym polu meta. Jaki jest najlepszy sposób na wydobycie informacji?

Na przykład, jak mogę wyświetlić pole „Wyprodukowano w” jako „KANADA”?

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

Powyższy przykładowy kod został wygenerowany przez print_r(get_post_custom($post->ID));.

Naprawdę doceniam każdy wgląd, bez względu na to, jak mały. :)

m-torin
źródło
1
Jeśli zamierzasz zagłosować na pytanie, przynajmniej bądź na tyle dorosły, aby powiedzieć dlaczego. Staram się nauczyć php. To może być podstawowa rzecz dla większości programistów, ale pochodzę z tła projektowego.
m-torin

Odpowiedzi:

35

Użyj unserialize (), aby przekonwertować go na tablicę.

$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];

Edycja - Powiązana myśl - coś, o czym należy pamiętać przy przechowywaniu takich meta danych w postaci szeregowej, to ograniczenie możliwości korzystania z tych danych w zapytaniach, jeśli jest to dla Ciebie ważne. na przykład, nie jest tak łatwo pisać zapytania, takie jak „pokaż mi wszystkie części wyprodukowane w Kanadzie”, lub zamawiać wyniki według identyfikatora silnika, ponieważ dane te są przechowywane z garstką innych danych w jednym polu.

Milo
źródło
@ M.Taylor - nie ma za co, sprawdź edycję, którą dodałem na temat serializowanych danych i zapytań, nie jestem pewien, czy to dla ciebie problem, ale może tak być.
Milo
Bardzo ważne jest, aby stracić możliwość wyszukiwania danych. Będę musiał zastanowić się, jak nie przechowywać go w szeregowanej tablicy, biorąc pod uwagę, że nie napisałem skryptu.
m-torin
@ M.Taylor Nie, przepraszam. Jestem pewien, że ktoś tutaj może pomóc.
Milo