วิธีการดึงข้อมูลจากโพสต์ลำดับอาเรย์อนุกรม?


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-torin

คำตอบ:


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

แก้ไข - สิ่งที่ต้องคำนึงถึง - สิ่งที่ต้องคำนึงถึงเมื่อเก็บข้อมูลเมตาต่อเนื่องเช่นนี้คือคุณจำกัดความสามารถในการใช้ข้อมูลนั้นในแบบสอบถามหากนั่นเป็นข้อกังวลสำหรับคุณ ตัวอย่างเช่นมันไม่ง่ายนักที่จะเขียนคำสั่งเช่น "แสดงชิ้นส่วนทั้งหมดที่ผลิตในแคนาดา" หรือสั่งซื้อผลลัพธ์โดยรหัสเครื่องยนต์เนื่องจากข้อมูลนั้นซ่อนตัวอยู่กับข้อมูลอื่น ๆ จำนวนมากในฟิลด์เดียว


@ M.Taylor - ยินดีต้อนรับตรวจสอบการแก้ไขที่ฉันเพิ่มเกี่ยวกับข้อมูลที่เป็นอนุกรมและข้อความค้นหาไม่แน่ใจว่าเป็นเรื่องที่คุณกังวล แต่อาจเป็นไปได้
Milo

คุณเป็นจุดที่ดีเกี่ยวกับการสูญเสียความสามารถในการค้นหาข้อมูล ฉันจะต้องดูวิธีที่จะไม่เก็บไว้ในอาร์เรย์ต่อเนื่องเนื่องจากฉันไม่ได้เขียนสคริปต์
m-torin

@ M.Taylor ฉันไม่ขอโทษ ฉันแน่ใจว่าคนที่นี่สามารถช่วยได้
Milo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.