我在数组中有50个项目,如下所示:
array:50 [▼
0 => {#253 ▼
+"message": "message_1"
+"created_time": {#254 ▼
+"date": "2016-03-03 07:54:05.000000"
+"timezone_type": 1
+"timezone": "+00:00"
}
+"id": "167633226631991_1051771021551536"
}
1 => {#255 ▼
+"message": "message_2"
+"created_time": {#256 ▼
+"date": "2016-03-02 13:35:26.000000"
+"timezone_type": 1
+"timezone": "+00:00"
}
+"id": "167633226631991_1051313571597281"
}
]
我需要获取数组中的每个变量。但我一直收到一个错误:
Undefined property: stdClass::$message
我不确定我想念的是什么:
foreach ($posts as $post) {
$test = array('message' => $post->message );
}
以及
$a = -1;
$alpha = 0;
$omega = count($posts);
$empty_array = array();
foreach (range($alpha,$omega) as $i) {
++$a;
$test = $posts[$a]->message;
array_push($empty_array, $test);
}
但是我得到了同样的错误。我正在使用laravel 5.2。
更新: 该阵列来自facebook的图形API。我正在使用:
转换json格式$posts = json_decode($userNode['posts']);
执行此操作,然后按上述方式显示array:50
。
答案 0 :(得分:2)
由于数组是一个对象数组,因此在键入$post->message
时正确引用它。执行$post['message']
将不起作用,因为它不是数组数组。
我认为Undefined property: stdClass::$message
错误即将发生,因为$posts
数组中的某些对象有一个空的+message
或一个不存在的+message
处理此问题的最佳方法是使用isset()
。但是,您还需要将$test
更改为$test[]
,以防止它在每次循环时被覆盖。
代码:
foreach ($posts as $post) {
isset($post->message) ? $test[] = array('message' => $post->message ) : null;
}
之后,dd($test)
将为您提供一个包含消息的数组数组。
如果你真的只想要一个简单的消息数组,那么就这样做:
foreach ($posts as $post) {
isset($post->message) ? $test[] = $post->message : null;
}