Re: safe to delete elements of array in foreach
- From: Jerry Stuckle <jstucklex@xxxxxxxxxxxxx>
- Date: Sun, 20 May 2007 10:23:31 -0400
Jon Slaughter wrote:
"Jerry Stuckle" <jstucklex@xxxxxxxxxxxxx> wrote in message news:lcWdnQnjjd1qKdLbnZ2dnUVZ_oLinZ2d@xxxxxxxxxxxxxxSchraalhans Keukenmeester wrote:At Fri, 18 May 2007 21:05:36 -0400, Jerry Stuckle let his monkeys type:Yes, foreach() works on a copy. But while the manual indicates changes to the copy don't affect the original - they say nothing about when changes to the original will affect the copy.
ZeldorBlat wrote:I agree 100% with you not to rely on undocumented 'features'.On May 18, 11:40 am, "Jon Slaughter" <Jon_Slaugh...@xxxxxxxxxxx>Sorry, I agree with Jon on this one.
wrote:
"ZeldorBlat" <zeldorb...@xxxxxxxxx> wrote in messageNo, the question is not to (sic) hard for me. But, as you've already
news:1179501018.125313.63600@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
On May 18, 11:05 am, "Jon Slaughter" <Jon_Slaugh...@xxxxxxxxxxx>Um... cause I did... but that doesn't mean much. Just cause someone tries
wrote:
Is it safe to remove elements from an array that foreach is working on?Why don't you try it and see what happens?
(normally this is not the case but not sure in php) If so is there an
efficient way to handle it? (I could add the indexes to a temp array and
delete afterwards if necessary but since I'm actually working in a nested
situation this could get a little messy. I guess I could set there values
to
null and remove them afterwards?
Thanks,
Jon
something doesn't prove that it will always work like that...
got any more bright ideas?
Or is the question to hard for you?
discovered, it isn't that difficult to test, either.
I make it a habit not to delete entries in a foreach() loop. Rather, I build an array of keys I want to delete, and after the loop ends, delete the entries from my delete array.
I don't know whether an operation like this is guaranteed to work in PHP - I've never seen it documented, so I suspect not. And just because it works in one release under a certain set of conditions is not a guarantee it will work on another release or under different conditions.
Just out of curiosity I took this one step further and discovered the
following (again, can't rely on this to hold true unless it's documented
somewhere, well hidden):
<?PHP
$array=array('john','james','delilah','mary');
foreach ($array as $key=>$value) {
echo "$key => $value".NEWLINE;
if ($value == 'delilah') {
$array[$key]='samson';
} elseif ($value=='james') {
unset($array[$key]);
}
}
echo NEWLINE;
foreach ($array as $key=>$value) {
echo "$key => $value".NEWLINE;
}
?>
0 => john
1 => james
2 => delilah
3 => mary
0 => john
2 => samson
3 => mary
The foreach loop operates on a copy of the array
The original array remains in scope
Current($array) points to the first element throughout the loop
I'd think setting elements to NULL directly in the array isn't any better,
you're still relying on the same 'feature'.
Sh
since its a copy the original should effect in any way the copy?
I could only see this if the copy is not a deep copy.... but in php all copies are deep?
There is nothing indicating when the copy is updated from the original. It might be only at the beginning, everything through the loop or anything else.
It's not documented - so you can't depend on the operation.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@xxxxxxxxxxxxx
==================
.
- Follow-Ups:
- Re: safe to delete elements of array in foreach
- From: Schraalhans Keukenmeester
- Re: safe to delete elements of array in foreach
- References:
- safe to delete elements of array in foreach
- From: Jon Slaughter
- Re: safe to delete elements of array in foreach
- From: ZeldorBlat
- Re: safe to delete elements of array in foreach
- From: Jon Slaughter
- Re: safe to delete elements of array in foreach
- From: ZeldorBlat
- Re: safe to delete elements of array in foreach
- From: Jerry Stuckle
- Re: safe to delete elements of array in foreach
- From: Schraalhans Keukenmeester
- Re: safe to delete elements of array in foreach
- From: Jerry Stuckle
- Re: safe to delete elements of array in foreach
- From: Jon Slaughter
- safe to delete elements of array in foreach
- Prev by Date: Re: safe to delete elements of array in foreach
- Next by Date: Re: Data Mining / Data/Website Scraping
- Previous by thread: Re: safe to delete elements of array in foreach
- Next by thread: Re: safe to delete elements of array in foreach
- Index(es):
Relevant Pages
|