我创建了一个新的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;
}
答案 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);