Я очень новичок в многомерных массивах, и это вызывает у меня много времени.
Мой массив выглядит следующим образом:
$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?
В PHP прохождение по ссылке ( &
) … противоречиво. Я рекомендую не использовать его, если вы не знаете, зачем вам это нужно, и проверьте результаты.
Я бы рекомендовал сделать следующее:
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){
– поэтому вы будете работать с исходным массивом.
Подробнее о передаче по ссылке.
function checkForm(& $fields){ foreach($fields as $field){ if($field['required'] && strlen($_POST[$field['name']]) <= 0){ $fields[$field]['value'] = "Some error"; } } return $fields; }
Это то, что я предлагаю пройти по ссылке
Попробуй это
function checkForm($fields){ foreach($fields as $field){ if($field['required'] && strlen($_POST[$field['name']]) <= 0){ $field['value'] = "Some error"; } } return $field; }