如何正确访问数组对象

时间:2013-02-26 13:07:45

标签: php

我有一个来自webservice查询的结果,我想从中获取一些值。它有效,但我有PHP通知问题,所以我可能做错了。

这是$items变量内容:

stdClass Object
(
    [response] => stdClass Object
        (
            [0] => stdClass Object
                (
                    [id] => 275
                    [corpid] => 16107
                    [name] => default
                    [description] => 
                    [status] => ok
                    [nbSteps] => 7
                )

            [defaultItem] => 275
        )

    [error] => 
    [status] => success
)

所以我尝试了类似的东西:

foreach ( $items->response AS $key => $item ) {
    if ( $item->name == 'default' ){ // Line 106
        $Id = $item->id;
    }
}

可行,$Id等于275,但PHP返回通知:

Notice: Trying to get property of non-object in /home/web/dev/webservice-form.php on line 106

非常感谢任何帮助。

编辑:这是$ item变量的内容(取自foreach循环):

stdClass Object
(
    [id] => 275
    [corpid] => 16107
    [name] => default
    [description] => 
    [status] => ok
    [nbSteps] => 7
)

275

请注意,'275'是结果的一部分。

2 个答案:

答案 0 :(得分:2)

问题是内部对象中的defaultItem条目。您的循环将在某个时刻达到此目的并尝试访问不存在的name,因为没有对象。

应该可以使用is_object()轻松解决。

答案 1 :(得分:2)

您有混合类型,一个是对象,一个是int值,请尝试检查每个项目是什么:

foreach ( $items->response AS $key => $item ) {

    if(is_object($item) && $item->name == 'default'){ // Line 106
        $Id = $item->id;
    }
    else {
         $Id = $item; // assume it's scalar value
    }
}

显然,这将取决于您还可以在其他任何需要添加的检查中获得的其他内容。

相关问题