我在以下速度模板的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]]].
但也许我在这里错过了一些观点……