数组 – 速度foreach循环 – 迭代数组得到更新,而不用于赋值

我在以下速度模板的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]]].

但也许我在这里错过了一些观点……

点赞