2016-03-06 128 views
1

我有一个数组,看起来像这样50项:如何从数组中提取每个项目? laravel/PHP

 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

尝试写$ post ['message'] –

+0

'dd($ post)'在foreach中显示的是什么? – Joseph

+0

@RaviHirani我试过$ post ['message']我得到这个错误'不能使用类型为stdClass的对象作为数组' – kevinabraham

回答

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; 
    } 
+0

非常感谢!像魅力一样工作。 – kevinabraham

+0

很高兴听到它! – Joseph

+1

@Joseph:尼斯回答哥哥:)也许在laravel对象中也可以访问数组。 HTTP://计算器。com/questions/22897919/confused-between-array-and-objects-in-laravel –

相关问题