php将项添加到foreach循环之外的数组中

时间:2016-10-16 06:46:33

标签: php arrays foreach

我尝试做的是遍历一系列项目并将其中的每一项添加到我的数据库中。在他们添加到数据库之后,添加&#39;类&#39;函数应返回每个项的状态和消息。我尝试将这些状态和消息中的每一个添加到outcome循环之外的foreach数组中,然后当循环完成时我尝试打印outcome数组,但我一直收到此错误: Trying to get property of non-object in <b>pathToTheLoop\ScheduleController.php</b> on line <b>38</b><br />。指定的行指向我尝试将内容添加到outcome数组的位置。

无论如何,这是我的代码:

$returned = array();
foreach ($dates as $date) {
  $startStr = $date . " " . $start;
  $startDate = DateTime::createFromFormat('d/m/Y H:i:s', $startStr);
  $endStr = $date . " " . $end;
  $endDate = DateTime::createFromFormat('d/m/Y H:i:s', $endStr);

  $sdl = new Schedule($startDate, $endDate, null);
  $outcome = $sdl->createSlot();
  $returned['status'] = $outcome->status;
  $returned['message'] = $outcome->message;
}
print json_encode($returned);

请注意,我已尝试使用上述方法填充数组,以及使用以下方法:

$returned[] = array(
  $status => $outcome->status,
  $message => $outcome->message
);

我没有包含Schedule类的代码,因为我相当确定它是有效的,因为我发送添加到数据库的内容实际上已经添加了,因为如果我替换了在我尝试使用print // the outcomes填充数组的部分,它实际打印出来。

修改:当我执行var_dump($outcome);而不是尝试将结果添加到$returned时,我明白了这一点:

array(2) {
  ["status"]=>
  string(7) "success"
  ["message"]=>
  string(62) "New slot added from 2016-10-10 09:00:01 to 2016-10-10 10:00:00"
}
array(2) {
  ["status"]=>
  string(7) "success"
  ["message"]=>
  string(62) "New slot added from 2016-10-17 09:00:01 to 2016-10-17 10:00:00"
}
array(2) {
  ["status"]=>
  string(7) "success"
  ["message"]=>
  string(62) "New slot added from 2016-10-24 09:00:01 to 2016-10-24 10:00:00"
}
array(2) {
  ["status"]=>
  string(7) "success"
  ["message"]=>
  string(62) "New slot added from 2016-10-31 09:00:01 to 2016-10-31 10:00:00"
}

2 个答案:

答案 0 :(得分:1)

$outcome的值似乎是一个数组而不是一个对象,因此您可以尝试将结果作为对象进行转换,并允许您使用对象表示法来访问这些值。

  $outcome = (object)$sdl->createSlot();
  $returned['status'] = $outcome->status;
  $returned['message'] = $outcome->message;

或者,使用数组符号

  $outcome = $sdl->createSlot();
  $returned['status'] = $outcome['status'];
  $returned['message'] = $outcome['message'];

答案 1 :(得分:0)

只需在每个数组行中创建一个数组。

$returned[] = array("status" => $outcome->status, "message" =>$outcome->message );