In PHP, passing by reference (&) is … controversial. I recommend not using it unless you know why you need it and test the results.
I would recommend doing the following:
foreach ($fields as $key => $field) {
if ($field['required'] && strlen($_POST[$field['name']]) <= 0) {
$fields[$key]['value'] = "Some error";
}
}
So basically use $field when you need the values, and $fields[$key] when you need to change the data.