在以下速度模板的foreach循环中,我遇到了一个非常奇怪的行为:
<html>
<body>
<table>
#set( $arrayOfArray = [[1]] )
#set( $new_arrOfArray = [] )
#set( $new_arr = [] )
<tr><td>Line 9</td><td>arrayOfArray: $arrayOfArray</td></tr>
#foreach ($arr in $arrayOfArray)
<tr><td>Line 11</td><td>arrayOfArray: $arrayOfArray</td></tr>
#set( $new_arr = $arr )
<tr><td>Line 13</td><td>arrayOfArray: $arrayOfArray</td></tr>
#if ($new_arr.add([ true ])) #end
<tr><td>Line 15</td><td>arrayOfArray: $arrayOfArray</td></tr>
#if ($new_arr.add([5,6])) #end
<tr><td>Line 17</td><td>arrayOfArray: $arrayOfArray</td></tr>
#if ($new_arrOfArray.add($new_arr)) #end
<tr><td>Line 19</td><td>arrayOfArray: $arrayOfArray</td></tr>
#end
<tr><td>Line 21</td><td>arrayOfArray: $arrayOfArray</td></tr>
</table>
</body>
</html>
如您所见,我正在遍历一个数组数组(为简单起见,在此示例中,我只将一个数组放入$ arrayOfArray中,但是实际情况当然更复杂)。
从代码中还可以看到,我根本不操纵变量$ arrayOfArray。但是,该代码生成以下输出:
第9行arrayOfArray:[[1]]
第11行arrayOfArray:[[1]]
第13行arrayOfArray:[[1]]
第15行arrayOfArray:[[1,[true]]]
第17行arrayOfArray:[[1,[true],[5,6]]]
第19行arrayOfArray:[[1,[true],[5,6]]]
第21行arrayOfArray:[[1,[true],[5,6]]]
因此,似乎每当我向$ new_arr添加新的数组元素时,变量$ arrayOfArray也会被更新。
有人能解释这种行为吗?
任何帮助表示高度赞赏。
安德烈亚斯
最佳答案
我不确定您需要做什么。克隆会有所帮助吗?更换
#set( $new_arr = $arr )
通过
#set( $new_arr = $arr.clone() )
将使您的$ arrayOfArray保持不变,而$ new_arrOfArray最后将为[[1,[true],[5,6]]]。
但是也许我在这里遗漏了一点...