I came across very strange behavior in the foreach loop of the following speed pattern:
<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 iterate over the array of the array (for simplicity, I just put one array in $ arrayOfArray in this example, but the real life, of course, is more complicated).
As you can see from the code, I do not manipulate the $ arrayOfArray variable at all. However, the code generates the following output:
String 9 arrayOfArray: [[1]]
String 11 arrayOfArray: [[1]]
String 13 arrayOfArray: [[1]]
String 15 arrayOfArray: [[1, [true]]]
String 17 arrayOfArray: [[1, [true ], [5, 6]]]
String 19 arrayOfArray: [[1, [true], [5, 6]]]
String 21 arrayOfArray: [[1, [true], [5, 6]]]
, , , $new_arr, $arrayOfArray .
- ?
.