Оператор foreach
следует использовать как своего рода способ циклического перемещения по коллекции и выполнения какой-либо логики над ней. Если то, что в нем, влияет на другие вещи в программе, используйте этот цикл.
Метод .each
использует array_map
для циклического просмотра каждого объекта в коллекции и выполнения закрытия для каждого из них. Затем он возвращает результирующий массив. Это ключ! .each
следует использовать, если вы хотите каким-то образом изменить коллекцию. Может быть, это массив автомобилей, и вы хотите сделать модель прописной или строчной. Вы просто передадите замыкание методу .each
, который берет объект и вызывает strtoupper()
для модели каждого объекта Car. Затем он возвращает коллекцию с внесенными изменениями.
Мораль этой истории такова: используйте метод .each
, чтобы каким-то образом изменить каждый элемент в массиве; используйте цикл foreach
, чтобы использовать каждый объект для воздействия на какую-либо другую часть программы (с использованием некоторого логического оператора).
ОБНОВЛЕНИЕ (7 июня 2015 г.)
Как сказано так Красноречиво (видите, что я там сделал?) ниже, приведенный выше ответ немного отличается. Метод .each
, использующий array_map
, фактически никогда не использовал выходные данные вызова array_map
. Таким образом, новый массив, созданный array_map
, не будет сохранен на Collection
. Чтобы изменить его, вам лучше использовать метод .map
, который также существует для объекта Collection
.
Использование оператора foreach
для перебора каждого из них имеет немного больше смысла, потому что вы не сможете получить доступ к переменным вне замыкания, если не убедитесь, что используете оператор use
, что мне кажется неудобным.
Реализация, когда приведенный выше ответ был первоначально написан, может быть найдено здесь.
.each
в Laravel 5.1
Новый .each
, о котором идет речь ниже, больше не использует array_map
. Он просто перебирает каждый элемент в коллекции и вызывает переданный $callback
, передавая ему элемент и его ключ в массиве. Функционально вроде работает одинаково. Я считаю, что использование цикла foreach
имело бы больше смысла при чтении кода. Тем не менее, я вижу преимущества использования .each
, потому что он позволяет вам объединять методы в цепочку, если вам это нравится. Это также позволяет вам вернуть false из обратного вызова, чтобы выйти из цикла раньше, если ваша бизнес-логика требует от вас возможности.
Для получения дополнительной информации о новой реализации посетите страницу исходный код.
person
searsaw
schedule
03.09.2013
return $item;
в конце? - person Niklas Modess   schedule 02.10.2016