Добавить значение в новую коллекцию

-1

Я создал новую 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;
}
  • 2
    Что касается $collection = collect($messages) теперь у вас есть коллекция сообщений. В любом случае вам не хватает понимания массивов, что здесь происходит $a['message'] = 'first'; $a['message'] = 'second' , хорошо, если вы напечатаете $a вы увидите message = 'second' , почему? Поскольку ключ уникален для каждого массива, то же самое для коллекции.
Теги:
arrays
foreach
collections

3 ответа

0
Лучший ответ

У вас есть массив с одним и тем же ключом, поэтому цикл for переопределяет одно и то же значение снова и снова.

Если вам нужна коллекция, содержащая объекты с одним и тем же ключом, вы можете изменить следующий код:

$new = array();
foreach ([1, 2, 3] as $i) {
  $new[] = array('message' => $i);
}
$collection = collect($new);
  • 0
    да, это сработало! большое спасибо .. как будто это стало очень запутанным, я знал, что ответ был легким, но ..
0

проверьте этот код:

$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"
]
}
0

Вы создаете коллекцию с 1 ключом: именно "message" а затем переходите к перезаписыванию этого ключа в течение всего цикла. Таким образом, PHP обрабатывает это, как показано в вашем вопросе: коллекция с 1 ключом и значением 1.

Это имеет смысл (например, сколько домов находится на вашем домашнем адресе? Только одно право? Что будет с вашей почтой, если бы было 16 домов с одним и тем же адресом?).

То, что вы хотите, просто невозможно: как PHP должен знать, что он должен вернуть, когда вы запрашиваете значение в "message" если вся структура данных будет состоять из одного и того же ключа?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню