Мне было интересно, можно ли отредактировать текущий объект, который обрабатывается в foreach
цикле
Я работаю с массивом объектов $questions
и хочу просмотреть и найти ответы, связанные с этим объектом вопроса, в моей базе данных. Итак, для каждого вопроса выберите объекты ответа и обновите текущий $question
внутри моего foreach
цикла, чтобы я мог выводить / обрабатывать где-нибудь еще.
foreach($questions as $question){
$question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
Ответы:
Есть 2 способа сделать это
Таким образом вы сохраните ключ, чтобы вы могли снова обновить его в основной
$questions
переменнойили
При добавлении
&
будет$questions
обновляться. Но я бы сказал, что рекомендуется первый, хотя он короче (см. Комментарий Пейстей)Согласно документации PHP
foreach
:источник
foreach
действительно не рекомендуется, способforeach
передачи части значения цикла приводит к непредсказуемому поведению. Это может быть дольше, но вы гораздо безопаснее использовать здесь метод 1.foreach
отношении ужасов вроде этого: stackoverflow.com/questions/3307409/… (@Nico, к сведению тоже)Разумеется, использование
array_map
и если использование контейнераArrayAccess
для получения объектов - это просто более разумный семантический способ сделать это?Семантика карты массива аналогична для большинства языков и реализаций, которые я видел. Он предназначен для возврата измененного массива на основе элемента входного массива (высокий уровень игнорирует языковые предпочтения компиляции / времени выполнения); цикл предназначен для выполнения большей логики.
Для извлечения объектов по ID / PK, в зависимости от того, используете ли вы SQL или нет (это кажется предложенным), я бы использовал фильтр, чтобы убедиться, что я получаю массив действительных PK, затем запятую и поместите в предложение SQL
IN()
, чтобы вернуть набор результатов. Он делает один вызов вместо нескольких через SQL, что немного оптимизируетcall->wait
цикл. Самое главное, что мой код будет хорошо читаться любому человеку, владеющему любым языком и обладающему определенной степенью компетентности, и мы не сталкиваемся с проблемами изменчивости.против
Если вы знаете, что делаете, у вас никогда не будет проблем с изменчивостью (помня, что если вы намереваетесь перезаписать,
$arr
вы всегда можете$arr = array_map
и прямо.источник