有人可以解开这个谜团吗?我有两个代码示例。我认为第二个例子和第一个例子做的一样,但显然它没有。
这有效:
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
)
)
)
编辑,已解决:所以唯一的问题是我没有在每个对象内部的消息属性
答案 0 :(得分:1)
为什么你认为他们是一样的?第一个示例访问数组元素0
和1
;第二次访问0
,1
,2
,3
,4
,5
,6
,7
,8
,9
和10
。显然,鉴于您收到的错误消息,其中至少有一个元素不存在。
print_r
和echo
之间也存在差异。
答案 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()
一次,而不是每次循环迭代。