Php 在mysql while循环中解析序列化数据
我正试图解析wp_postemta表中的WordPress meta_value列 meta_值行内容采用如下序列化格式:Php 在mysql while循环中解析序列化数据,php,mysql,arrays,serialization,Php,Mysql,Arrays,Serialization,我正试图解析wp_postemta表中的WordPress meta_value列 meta_值行内容采用如下序列化格式: a:1:{i:0;O:8:"stdClass":2:{s:5:"notes";s:0:"";s:12:"applications";a:5: {s:4:"Year";O:8:"stdClass":2: {s:4:"name";s:4:"Year";s:5:"value";s:4:"2006";}s:4:"Make";O:8:"stdClass":2: {s:4:"name"
a:1:{i:0;O:8:"stdClass":2:{s:5:"notes";s:0:"";s:12:"applications";a:5:
{s:4:"Year";O:8:"stdClass":2:
{s:4:"name";s:4:"Year";s:5:"value";s:4:"2006";}s:4:"Make";O:8:"stdClass":2:
{s:4:"name";s:4:"Make";s:5:"value";s:5:"Isuzu";}s:5:"Model";O:8:"stdClass":2:
{s:4:"name";s:5:"Model";s:5:"value";s:5:"i-280";}s:4:"Trim";O:8:"stdClass":2:
{s:4:"name";s:4:"Trim";s:5:"value";s:31:"Base Extended Cab Pickup 2-Door";}s:6:"Engine";O:8:"stdClass":2:
{s:4:"name";s:6:"Engine";s:5:"value";s:54:"2.8L 2770CC 169Cu. In. l4 GAS DOHC Naturally Aspirated";}}}}
我能够使用while循环来取消序列化数据
$results = $mysqli->query("SELECT meta_value
FROM wp_postmeta
WHERE meta_key = '_ebay_item_compatibility_list';");
while($row = $results->fetch_array()) {
echo '<pre>';
print_r(unserialize($row['meta_value']));
echo '</pre>';
}
我要做的是访问所有的值元素
意思是$year=['year']['value']$make=['make']['value'];等等
在while循环中如何访问这些值元素?您有stdClass对象和数组的组合,因此对于通常使用[]的数组和对象的属性-> 例如:
while($row = $results->fetch_array()) {
$foo = unserialize($row['meta_value']);
foreach ( $foo as $f) {
foreach ( $f->applications as $application) {
echo $application->value;
}
}
}
}
编辑:
如果一行中有更多数组元素,则可以使用foreach
谢谢[0]有点混乱,但它返回了所有结果。我喜欢它,谢谢。更容易理解和掌握。您还可以使用foreach for Application array
while($row = $results->fetch_array()) {
$foo = unserialize($row['meta_value']);
$foo[0]->applications['Make']->value;
while($row = $results->fetch_array()) {
$foo = unserialize($row['meta_value']);
foreach ( $foo as $f) {
foreach ( $f->applications as $application) {
echo $application->value;
}
}
}