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

时间:2011-12-13 08:23:10

标签: php function stdclass

我有时会出现以下错误 致命错误:无法使用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);

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

5 个答案:

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