No, neither language splits the string every time (that would be absurd).
From the PHP manual:
On each iteration, the value of the current element is assigned to
$valueand the internal array pointer is advanced by one (so on the
next iteration, you’ll be looking at the next element).
Note the reference to the internal array pointer. If each iteration operated on a distinct array, changing the internal array pointer would be meaningless.
From the ES5 annotated reference:
When the
forEachmethod is called with one or two arguments, the
following steps are taken:
- Let
 Obe the result of callingToObjectpassing thethisvalue as the argument.
Here O represents the object being iterated on; this result is only calculated once.
7
solved Is the array creation happening on every foreach loop? [closed]