为新系列增加价值



我创建了一个新collection,当我尝试在foreach循环中使用键添加新值时,它不起作用。它仅附加第一个值。我希望它全部添加。

这是我的代码:

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

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

{"message":"first"}

相反,它应该返回

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

问题出在哪里?

同样,当我在没有为集合提供密钥的情况下执行此操作时,它会返回所有:

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

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

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

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

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

这是完全有道理的(例如,您的家庭住址上有多少所房子?只有一个吧?如果有 16 间地址完全相同的房子,您的邮件会发生什么?

你想要的根本不可能:如果你在"message"请求值时,如果整个数据结构由同一个键组成,PHP 怎么知道它应该返回什么?

测试此代码:

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

输出:

Collection {#475 ▼
#items: array:3 [▼
2 => "sara"
1 => "reza"
0 => "ali"
]
}

最新更新