我有时会出现以下错误 致命错误:无法使用stdClass类型的对象作为数组。 有了这个功能:
function deliciousCount($domain_name)
{
$data = json_decode(
file_get_contents(
"http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
)
);
if ($data) {
return $data[0]->total_posts;
} else {
return 0;
}
}
$delic = deliciousCount($domain_name);
但有时仅针对特定域发生此错误 有什么帮助吗?
答案 0 :(得分:3)
根据the manual,有一个可选的第二个boolean
参数,它指定是否应将返回的对象转换为关联数组(默认为 false )。如果要将其作为数组访问,则只需将true
作为第二个参数传递。
$data = json_decode(
file_get_contents(
"http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
),
true
);
答案 1 :(得分:2)
在将$ data用作数组之前:
$data = (array) $data;
然后只需从数组中获取你的total_posts值。
$data[0]['total_posts']
答案 2 :(得分:1)
function deliciousCount($domain_name) {
$data = json_decode(
file_get_contents(
"http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
)
);
// You should double check everything because this delicious function is broken
if (is_array($data) && isset($data[ 0 ]) &&
$data[ 0 ] instanceof stdClass && isset($data[ 0 ]->total_posts)) {
return $data[ 0 ]->total_posts;
} else {
return 0;
}
}
答案 3 :(得分:0)
json_decode
返回stdClass的实例,您无法像访问数组一样访问该实例。通过将json_decode
作为第二个参数传递,true
可以返回数组。
答案 4 :(得分:-1)
function deliciousCount($domain_name)
{
$data = json_decode(
file_get_contents(
"http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
)
);
if ($data) {
return $data->total_posts;
} else {
return 0;
}
}
$delic = deliciousCount($domain_name);
或
function deliciousCount($domain_name)
{
$data = json_decode(
file_get_contents(
"http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name",true
)
);
if ($data) {
return $data['total_posts'];
} else {
return 0;
}
}
$delic = deliciousCount($domain_name);