不能将 stdClass 类型的对象用作数组


Cannot use object of type stdClass as array in

>我有时会出现以下错误致命错误: 不能将 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);

但此错误有时仅针对特定域发生有什么帮助吗?

根据手册,有一个可选的第二个boolean参数,它指定是否应将返回的对象转换为关联数组(默认值为 false(。如果您想将其作为数组访问,则只需将true作为第二个参数传递即可。

$data = json_decode(
    file_get_contents(
        "http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
    ),
    true
);
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;
    }
}

在使用 $data 作为数组之前:

$data = (array) $data;

然后简单地从数组中获取您的total_posts值。

$data[0]['total_posts']

json_decode返回 stdClass 的一个实例,您不能像访问数组那样访问该实例。 json_decode确实可以通过传递true作为第二个参数来返回数组。

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