Я создал новую 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;
}
У вас есть массив с одним и тем же ключом, поэтому цикл for переопределяет одно и то же значение снова и снова.
Если вам нужна коллекция, содержащая объекты с одним и тем же ключом, вы можете изменить следующий код:
$new = array();
foreach ([1, 2, 3] as $i) {
$new[] = array('message' => $i);
}
$collection = collect($new);
проверьте этот код:
$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"
]
}
Вы создаете коллекцию с 1 ключом: именно "message"
а затем переходите к перезаписыванию этого ключа в течение всего цикла. Таким образом, PHP обрабатывает это, как показано в вашем вопросе: коллекция с 1 ключом и значением 1.
Это имеет смысл (например, сколько домов находится на вашем домашнем адресе? Только одно право? Что будет с вашей почтой, если бы было 16 домов с одним и тем же адресом?).
То, что вы хотите, просто невозможно: как PHP должен знать, что он должен вернуть, когда вы запрашиваете значение в "message"
если вся структура данных будет состоять из одного и того же ключа?
$collection = collect($messages)
теперь у вас есть коллекция сообщений. В любом случае вам не хватает понимания массивов, что здесь происходит$a['message'] = 'first'; $a['message'] = 'second'
, хорошо, если вы напечатаете$a
вы увидитеmessage = 'second'
, почему? Поскольку ключ уникален для каждого массива, то же самое для коллекции.