使用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";})
答案 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);