Como extrair dados de uma matriz pós meta serializada?

23

Encontrei um script de decodificador XML para WP que armazena os dados como uma matriz em um meta campo personalizado. Qual é a melhor maneira de extrair as informações?

Por exemplo, como eu poderia exibir o campo "Fabricado em" como "CANADÁ"?

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

O código de exemplo acima foi produzido via print_r(get_post_custom($post->ID));.

Eu realmente aprecio qualquer insight, por menor que seja. :)

m-torin
fonte
1
Se você vai votar em uma pergunta, pelo menos, seja adulto o suficiente para dizer o porquê. Estou tentando aprender php. Isso pode ser uma coisa básica para a maioria dos programadores, mas eu venho de um background de design.
M-torin

Respostas:

35

Use unserialize () para convertê-lo em uma matriz.

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

Editar - pensamento relacionado - algo a ter em mente ao armazenar metadados serializados como este é que você limita sua capacidade de usar esses dados em consultas, se isso for uma preocupação para você. por exemplo, não é tão fácil escrever consultas como "mostre-me todas as peças fabricadas no Canadá" ou solicitar resultados por ID do mecanismo, pois esses dados são agrupados com vários outros dados em um campo.

Milo
fonte
@ M.Taylor - de nada, verifique a edição que adicionei sobre dados e consultas serializados, não tenho certeza de que é uma preocupação para você, mas pode ser.
Milo
Você faz um grande ponto em perder a capacidade de pesquisar os dados. Vou ter que estudar como não armazená-lo em uma matriz serializada, já que não escrevi o script.
M-torin
@ M. Taylor Eu não, desculpe. Tenho certeza que alguém aqui pode ajudar.
Milo