使用大括号从stdClass对象/数组打印值

时间:2016-03-23 16:39:27

标签: php arrays object

使用PHP,我使用print_r打印出一个数组($ result)。但是返回数组的格式对我来说是一个新的格式。具体来说,如何在具有多个值的特定格式中找到在“reviews_review”字段中找到的文本(“哇,真棒......”)?例如:

stdClass Object
 (
 [node_reviews_nid] => 5270
 [reviews_review] => a:2:{s:5:"value";s:38:"Wow, what a great place.  The bestest!";s:6:"format";s:13:"filtered_html";}

那些额外的值和大括号让我难过。如果我想要node_reviews_nid我可以简单地使用$ result-> node_reviews_nid“ - 但这样做才能让reviews_review检索得太多,即

a:2:{s:5:"value";s:38:"Wow, what a great place.  The bestest!";s:6:"format";s:13:"filtered_html";})

2 个答案:

答案 0 :(得分:2)

你看到的奇怪的大括号是PHP的serialize函数的结果。

基本上,它旨在将对象,嵌套数组等复杂结构转换为简单的字符串,这些字符串更容易,更安全,例如通过HTTP传输。可以将其视为JSON表示,但特定于PHP(尝试json_decode()序列化值)。

另外值得注意的是serialize - d字符串具有最大长度,超过该字符串只会被截断,因此避免将其用于非常大的结构 - 您将丢失数据。

相反的是unserialize。因此,要阅读评论的文本,首先必须反序列化“reviews_review”属性,然后引用结果数组的“value”索引。

$review_data = unserialize($result->reviews_review);
$review_text = $review_data['value'];
print($review_text);

答案 1 :(得分:1)

reviews_review中的数据看起来像一个序列化数组,即使用serialize()函数编写

因此,您需要先使用unserialize()对其进行反序列化,然后才能使用它

$review = unserialize($obj->reviews_review);
print_r($review);