PHP foreach изменяет исходные значения массива
Я очень новичок в многомерных массивах, и это меня очень беспокоит.
мой массив выглядит следующим образом:
$fields = array(
"names" => array(
"type" => "text",
"class" => "name",
"name" => "name",
"text_before" => "name",
"value" => "",
"required" => true,
)
)
затем я получил функцию проверки, если эти входы заполнены, если они требуются.
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
Теперь моя проблема в этой строке
$fields[$field]['value'] = "Some error";
Я хочу изменить содержимое исходного массива, так как я возвращаю это, но как мне получить имя текущего массива (имена в этом примере) в моем foreach петля?
5 ответов:
Я бы рекомендовал сделать следующее:
foreach ($fields as $key => $field) { if ($field['required'] && strlen($_POST[$field['name']]) <= 0) { $fields[$key]['value'] = "Some error"; } }
так что в основном использовать
$field
когда вам нужны значения, и$fields[$key]
когда вам нужно изменить данные.
использовать
&
:foreach($arr as &$value) { $value = $newVal; }
&
передает значение массива в качестве справочных материалов и не создает новый экземпляр переменной. Таким образом, если вы измените ссылку, исходное значение изменится.
использовать
foreach($fields as &$field){
- Итак, вы будете работать с исходным массивом.здесь больше о передаче по ссылке.