php foreach /表演奇怪

时间:2014-07-24 18:15:32

标签: php for-loop foreach

有人可以解开这个谜团吗?我有两个代码示例。我认为第二个例子和第一个例子做的一样,但显然它没有。

这有效:

 print_r($this->facebook->my_retrieve_timeline()['data'][0]->message);
print_r($this->facebook->my_retrieve_timeline()['data'][2]->message);

这不是:

for ($i=0; $i <11; $i++) { 
        echo $this->facebook->my_retrieve_timeline()['data'][$i]->message;
    }

错误:

Message:  Undefined property: stdClass::$message

数组看起来像这样:

Array
(
[data] => Array
    (
        [0] => stdClass Object
            (

                [message] => bbbbbbbbb

            )

        [1] => stdClass Object
            (


                [lol] => aaaaaaaaa
            )
        [2] => stdClass Object
            (

                [message] => ccc

            )


    )
)

编辑,已解决:所以唯一的问题是我没有在每个对象内部的消息属性

2 个答案:

答案 0 :(得分:1)

为什么你认为他们是一样的?第一个示例访问数组元素01;第二次访问012345678910。显然,鉴于您收到的错误消息,其中至少有一个元素不存在。

print_recho之间也存在差异。

答案 1 :(得分:0)

您的错误是因为您尝试在不存在时访问对象属性message。此外,在这种情况下不是错误,但您也假设存在数组索引0-10,可能不是这种情况。

仅循环访问有效/现有数组元素,并在访问它之前检查message属性是否存在:

foreach($this->facebook->my_retrieve_timeline()['data'] as $data) {
    if(property_exists($data, 'message')) { // or use isset($data->message)
        echo $data->message;
    }
}

这不会假设存在哪些数字键(仅循环现有元素),并且在访问它之前还会检查message属性是否存在。作为奖励,它只调用my_retrieve_timeline()一次,而不是每次循环迭代。