ポストメタシリアル化配列からデータを抽出する方法は?


23

カスタムメタフィールドにデータを配列として保存するXMLから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));

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


1
質問に投票する場合は、少なくとも大人になって、その理由を説明してください。私はPHPを学ぶために一生懸命努力しています。これはほとんどのプログラマーにとって基本的なことかもしれませんが、私はデザインのバックグラウンドから来ています。
m-トリン

回答:


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

編集 -関連する考え-このようにシリアル化されたメタデータを保存する際に留意すべきことは、懸念がある場合、クエリでそのデータを使用する能力を制限することです。たとえば、「カナダで製造されたすべての部品を表示する」などのクエリを作成したり、エンジンIDで結果を並べたりするのは簡単ではありません。


@ M.Taylor-どういたしまして、シリアル化されたデータとクエリについて追加した編集をチェックしてください。それがあなたの懸念事項であるかどうかはわかりませんが、そうかもしれません。
ミロ

あなたはデータを検索する能力を失うことについて大きなポイントを作ります。スクリプトを作成しなかった場合、シリアル化された配列に格納しない方法を検討する必要があります。
m-torin

@ M.Taylor申し訳ありません。ここの誰かが助けてくれると確信しています。
ミロ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.