PHP的foreach改变原来的数组值

我在multidimensional array中是非常新的,这让我大开眼界。

我的数组如下所示:

$fields = array( "names" => array( "type" => "text", "class" => "name", "name" => "name", "text_before" => "name", "value" => "", "required" => true, ) ) 

然后我得到一个函数检查,如果这些input是填写,如果他们是必需的。

 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中,通过引用( & )传递是有争议的。 我build议不要使用它,除非你知道你为什么需要它并testing结果。

我会build议做以下几点:

 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; } 

并将该数组的值作为参考传递,而不会创build该variables的新实例。 因此,如果您更改参考,原始值将会改变。

http://php.net/manual/en/language.references.pass.php

使用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; } 

这是我build议通过引用传递

尝试这个

 function checkForm($fields){ foreach($fields as $field){ if($field['required'] && strlen($_POST[$field['name']]) <= 0){ $field['value'] = "Some error"; } } return $field; }