我今天遇到了一个奇怪的情况。我需要在foreach循环中更改数组元素。我们知道可以通过使用参考来完成。
foreach((array)$output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}
但是上面的代码不起作用,并且没有设置'subjectSchemeVersion'。同时,如果我删除(数组)它可以工作:
foreach($output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}
你能解释一下这种行为吗?
答案 0 :(得分:3)
通过将$output
变量强制转换为数组,您可以复制它。 &
仍然有效,但它指的是副本。循环之后,忘记/垃圾收集副本,原始$output
从未更改过。
您可以执行以下操作,这会将$output
转换为循环之前的数组:
settype($output, 'array');
foreach($output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}