I faced a very strange behaviour in the foreach loop of the following velocity template:
<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>
As you can see I'm looping through an array of array (for the sake of simplicity I just put a single array into $arrayOfArray in this example, but real life is of course more complex).
As you can also see from the code I do not manipulate the variable $arrayOfArray at all. However, the code generates the following output:
Line 9 arrayOfArray: [[1]]
Line 11 arrayOfArray: [[1]]
Line 13 arrayOfArray: [[1]]
Line 15 arrayOfArray: [[1, [true]]]
Line 17 arrayOfArray: [[1, [true], [5, 6]]]
Line 19 arrayOfArray: [[1, [true], [5, 6]]]
Line 21 arrayOfArray: [[1, [true], [5, 6]]]
So, it seems whenever I add a new array element to $new_arr the variable $arrayOfArray gets also updated.
Is anyone able to explain this behaviour??
Any help highly appreciated.
Andreas