PHP-изменить текущий объект в цикле foreach
мне было интересно, можно ли редактировать текущий объект, который обрабатывается в пределах foreach loop
Я работаю с массивом объектов $questions и я хочу пройти и искать ответы, связанные с этим объектом вопроса в моей БД. Таким образом, для каждого вопроса перейдите к объектам ответа и обновите текущий $questionвнутри мой foreach цикл, поэтому я могу выводить / обрабатывать в другом месте.
foreach($questions as $question){
$question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
2 ответов:
есть 2 способа сделать это
foreach($questions as $key => $question){ $questions[$key]['answers'] = $answers_model->get_answers_by_question_id($question['question_id']); }таким образом, вы сохраните ключ, так что вы можете обновить его в главной
$questionsпеременнаяили
foreach($questions as &$question){добавлять
&будет держать$questionsобновление. Но я бы сказал, что первый рекомендуется, хотя это короче (см. комментарий Paystey)для того, чтобы иметь возможность напрямую изменять массив элементы внутри цикла предшествуют $value с &. В этом случае значение будет присвоено по ссылке.
конечно, с помощью
array_mapи при использовании контейнера реализацииArrayAccessвыводить объекты - это просто более умный, семантический способ сделать это?семантика карты массива аналогична на большинстве языков и реализаций, которые я видел. Он предназначен для возврата модифицированного массива на основе элемента входного массива (высокий уровень игнорирования предпочтения типа компиляции/выполнения языка); цикл предназначен для выполнения большей логики.
для извлечения объектов по ID / PK, в зависимости от того, если вы используете SQL или нет (кажется, предлагается), я бы использовал фильтр, чтобы убедиться, что я получаю массив допустимых PK, а затем взрывается с запятой и помещается в SQL
IN()предложение для возврата результирующего набора. Он делает один вызов вместо нескольких через SQL, оптимизируя немногоcall->waitцикл. Самое главное, что мой код будет хорошо читаться кому-то с любого языка со степенью компетентности, и мы не сталкиваемся с проблемами изменчивости.<?php $arr = [0,1,2,3,4]; $arr2 = array_map(function($value) { return is_int($value) ? $value*2 : $value; }, $arr); var_dump($arr); var_dump($arr2);vs
<?php $arr = [0,1,2,3,4]; foreach($arr as $i => $item) { $arr[$i] = is_int($item) ? $item * 2 : $item; } var_dump($arr);если вы знаете, что вы у вас никогда не будет проблем с изменяемостью (имея в виду, если вы намерены перезаписать
$arrты всегда могла!--7--> и будьте откровенны.
Comments