PHP:在foreach循环中输入类型和更改元素

时间:2014-09-18 17:09:49

标签: php arrays foreach casting

我今天遇到了一个奇怪的情况。我需要在foreach循环中更改数组元素。我们知道可以通过使用参考来完成。

 foreach((array)$output['subjectComposite'] as &$subjectComposite){
     $subjectComposite['subjectSchemeVersion'] = $cellValue;
 }

但是上面的代码不起作用,并且没有设置'subjectSchemeVersion'。同时,如果我删除(数组)它可以工作:

 foreach($output['subjectComposite'] as &$subjectComposite){
     $subjectComposite['subjectSchemeVersion'] = $cellValue;
 }  

你能解释一下这种行为吗?

1 个答案:

答案 0 :(得分:3)

通过将$output变量强制转换为数组,您可以复制它。 &仍然有效,但它指的是副本。循环之后,忘记/垃圾收集副本,原始$output从未更改过。

您可以执行以下操作,这会将$output转换为循环之前的数组:

settype($output, 'array');
foreach($output['subjectComposite'] as &$subjectComposite){
    $subjectComposite['subjectSchemeVersion'] = $cellValue;
}