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的新实例。 因此,如果您更改参考,原始值将会改变。
使用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; }