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?
Ответы
Ответ 1
В PHP прохождение по ссылке (&
)... противоречиво. Я рекомендую не использовать его, если вы не знаете, зачем вам это нужно, и проверьте результаты.
Я бы рекомендовал сделать следующее:
foreach ($fields as $key => $field) {
if ($field['required'] && strlen($_POST[$field['name']]) <= 0) {
$fields[$key]['value'] = "Some error";
}
}
В основном используйте $field
, когда вам нужны значения, и $fields[$key]
, когда вам нужно изменить данные.
Ответ 2
Используйте &
:
foreach($arr as &$value)
{
$value = $newVal;
}
&
передает значение массива в качестве ссылки и не создает новый экземпляр переменной. Таким образом, если вы измените ссылку, исходное значение изменится.
http://php.net/manual/en/language.references.pass.php
Ответ 3
Используйте foreach($fields as &$field){
- чтобы вы работали с исходным массивом.
Здесь речь идет о передаче по ссылке.
Ответ 4
function checkForm(& $fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$fields[$field]['value'] = "Some error";
}
}
return $fields;
}
Это то, что я предлагаю пройти по ссылке
Ответ 5
Попробуйте это
function checkForm($fields){
foreach($fields as $field){
if($field['required'] && strlen($_POST[$field['name']]) <= 0){
$field['value'] = "Some error";
}
}
return $field;
}