【问题标题】:How to extract each of the items from an array? laravel/php如何从数组中提取每个项目? laravel/php
【发布时间】:2016-06-19 20:56:21
【问题描述】:

我在一个数组中有 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 将如上所示。

【问题讨论】:

  • 尝试写$post['message']
  • dd($post) 在 foreach 中显示什么?
  • @RaviHirani 我试过 $post['message'] 我收到此错误Cannot use object of type stdClass as array
  • @Joseph 如果我dd($post) 我得到{#253 ▼ +"message": "message_1" +"created_time": {#254 ▼ +"date": "2016-03-03 07:54:05.000000" +"timezone_type": 1 +"timezone": "+00:00" } +"id": "167633226631991_1051771021551536" }
  • 这个数组最初来自哪里,生成它的代码是什么?请在问题中更新此信息,而不是作为评论,因为它更易于阅读。

标签: php arrays sorting laravel laravel-5.2


【解决方案1】:

由于数组是一个对象数组,因此当您键入$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;
    }

【讨论】:

  • 非常感谢!像魅力一样工作。
  • @Joseph:很好的回答兄弟 :) 也许在 laravel 中的对象也可以作为数组访问。 stackoverflow.com/questions/22897919/…
  • 你也可以只使用 Laravel 助手 array_pluck($posts, 'message') :)
  • @RaviHirani 你是对的,在某些情况下它们是可以互换的。但是,在这种特定情况下,访问$post['message'] 将导致Cannot use object of type stdClass as array
  • 同意你我的朋友。情况并非如此:-)顺便说一句,我的名字是拉维,而不是您在回答中提到的其他人;-)
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2018-10-15
  • 2021-04-01
  • 1970-01-01
  • 2018-08-14
  • 2022-01-16
  • 2021-08-26
相关资源
最近更新 更多