Невозможно использовать объект типа stdClass в качестве массива в - PullRequest
3 голосов
/ 13 декабря 2011

у меня иногда появляется следующая ошибка Неустранимая ошибка: невозможно использовать объект типа 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 ]

3 голосов
/ 13 декабря 2011

Согласно руководству , существует необязательный второй параметр boolean, который указывает, должен ли возвращаемый объект быть преобразован в ассоциативный массив (по умолчанию false ).Если вы хотите получить доступ к нему как к массиву, просто передайте true в качестве второго параметра.

$data = json_decode(
    file_get_contents(
        "http://feeds.delicious.com/v2/json/urlinfo/data?url=$domain_name"
    ),
    true
);
2 голосов
/ 13 декабря 2011

Перед использованием $ data в качестве массива:

$data = (array) $data;

А затем просто получите значение total_posts из массива.

$data[0]['total_posts']
1 голос
/ 13 декабря 2011
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;
    }
}
0 голосов
/ 13 декабря 2011
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);
0 голосов
/ 13 декабря 2011

json_decode возвращает экземпляр stdClass, к которому вы не можете получить доступ, как если бы вы обращались к массиву.json_decode имеет возможность вернуть массив, передав true в качестве второго параметра.

...