maybe you should be foreach()ing with references? php.net : search "foreach" : As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value. <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * 2; } // $arr is now array(2, 4, 6, 8) unset($value); // break the reference with the last element ?> This is possible only if iterated array can be referenced (i.e. is variable), On Tue, Mar 16, 2010 at 5:43 PM, Robert Cummings <robert@xxxxxxxxxxxxx> wrote: > Peter Lind wrote: >> >> Hmm, will probably have to look inside PHP for this ... the foreach >> loop will copy each element as it loops over it (without actually >> copying, obviously), however there's no change happening to the >> element at any point and so there's nothing to suggest to the >> copy-on-write to create a new instance of the sub-array. >> >> It should look like this: >> $a = array(0, 1, 2, array(0, 1, 2, 3), 4, 5, 6, .... n); >> $b = $a[3]; >> doStuffs($b); >> >> Whether or not you loop over $a and thus move the internal pointer, >> you don't change (well, shouldn't, anyway) $b as that's a subarray >> which has it's own internal pointer, that isn't touched. >> >> Or maybe I've gotten this completely backwards ... > > I'm not sure of the exact reason... PHP has the following comment: > > Note: Unless the array is referenced, foreach operates on a copy > of the specified array and not the array itself. foreach > has some side effects on the array pointer. Don't rely on > the array pointer during or after the foreach without > resetting it. > > http://php.net/manual/en/control-structures.foreach.php > > I've always found the foreach loop to a be a bit on the bizarre size, this > is probably just another one of those bizarrities :) > > Cheers, > Rob. > -- > http://www.interjinn.com > Application and Templating Framework for PHP > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php