web-dev-qa-db-ja.com

メタ直列化後配列からデータを抽出する方法

カスタムメタフィールドのデータを配列として格納するXML to WPデコーダスクリプトが見つかりました。情報を抽出するための最善の方法は何ですか?

たとえば、「製造元」フィールドを「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));によって生成されました。

どんなに小さな洞察でも、私はどんな洞察にも本当に感謝します。 :)

19
torinagrippa

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

編集 - このようにシリアライズされたメタデータを保存するときに注意すべきことは、それが問題になるのであれば、クエリでそのデータを使用する機能を制限することです。たとえば、「カナダで製造されたすべての部品を表示する」というようなクエリを作成したり、エンジンIDで結果を注文したりするのは、そのデータが1つのフィールドにまとめられているためです。

26
Milo