为新集合添加值

时间:2018-05-08 12:29:10

标签: arrays laravel collections foreach

我创建了一个新的collection,当我尝试使用foreach循环中的键添加新值时,它无效。它只附加第1个值。我想要它添加所有。

这是我的代码:

$new = new Collection();

foreach($messages as $message){
 $new['message'] = $message->message;
}

但最终不是返回所有消息,而只返回第一条消息:

{"message":"first"}

相反它应该已经返回

{"message": "first", "message": "second"}

有什么问题?

当我在没有给出集合的密钥的情况下这样做时,它会返回所有:

foreach($messages as $message){
     $new = $message->message;
}

3 个答案:

答案 0 :(得分:0)

使用1个密钥创建集合:即"message",然后在循环期间继续覆盖此密钥。因此,PHP会处理此问题,如您的问题所示:具有1个键和1个值的集合。

这是完全合理的(例如,你的家庭住址有多少房子?只有一个房间?如果有16个房屋的地址完全相同,你的邮件会怎么样?)。

你想要的是不可能的:如果整个数据结构都包含在同一个密钥中,当你在options={ 'title':'Orders', 'vAxis': {'title': "Price in percent [%]"}, 'hAxis': { 'title': "Days to maturity [Days]", 'direction': "-1", 'gridlines': { 'count': '6'} }, } 询问值时,PHP应该如何知道它应该返回什么?

答案 1 :(得分:0)

你有一个具有相同键的数组,因此for循环会一次又一次地覆盖相同的值。

如果您想要一个包含具有相同键的对象的集合,您可以根据需要更改以下代码:

$new = array();
foreach ([1, 2, 3] as $i) {
  $new[] = array('message' => $i);
}
$collection = collect($new);

答案 2 :(得分:0)

测试此代码:

/pattern/-1

输出:

$messages=['ali','reza','sara'];
$new = new Collection();
foreach($messages as $key=>$message){
    $new->prepend($message,$key);
}

dd($new);