RE: modifying within foreach

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dude. Use your common sense and the example I just provided:

 foreach ($results as $key => $item) 
 {
    if ($item == 'foo') 
	unset($results[$key]);
    else ($item == 'bar')
	$results[$key] = 'new value';
 } 

so using your example:

 foreach ($results as $key => $item) 
 {
    if ($item[0] == 'value1') 
	unset($results[$key][0]);
    else ($item[0] == 'bar')
	$results[$key][0] = 'value4';
 } 

But since you have a multidimensional array, you have to really do two loops
to be useful:

 foreach ($results as $key => $item) 
 {
	 foreach ($item as $i => $value) 
	 {
		if ($value == 'value1')
		 unset($results[$key][$i])
	      else ($value == 'bar')
		 $results[$key][$i] = 'value4';
	 }
 }

Or something to that effect, I just wrote that freehand, but you should get
the idea.

http://daevid.com


> -----Original Message-----
> From: Andres Gonzalez [mailto:andres@xxxxxxxxxxxxxxx] 
> Sent: Tuesday, June 23, 2009 11:45 AM
> Cc: php-general@xxxxxxxxxxxxx
> Subject: Re:  modifying within foreach
> 
> I do not want to delete the whole array, only a particular $item.
> given this $results array:
> 
> Array
> (
> ["key1"] => Array
> (
> [0] => value1
> [1] => value2
> [2] => value3
> (
> ["key2"] => Array
> (
> [0] => value4
> [1] => value5
> [2] => value6
> )
> )
> 
> It is a value item that I want to delete based on a 
> particular criteria.
> In each pass I may delete a value item. However, it seems that each
> subsequent pass operates on the original $results array and not
> the modified one.
> 
> -Andres
> 
> 
> 
> Daevid Vincent wrote:
> >  foreach ($results as $key => $item) 
> >  {
> >     if ($item == 'foo') unset($results[$key]);
> >  }
> >
> >   
> >> -----Original Message-----
> >> From: Andres Gonzalez [mailto:andres@xxxxxxxxxxxxxxx] 
> >> Sent: Tuesday, June 23, 2009 11:27 AM
> >> To: php-general@xxxxxxxxxxxxx
> >> Subject:  modifying within foreach
> >>
> >> In the following example:
> >>
> >> foreach ($results as $key => $item)  {
> >>
> >>     //bla bla bla -- unset some of the $items
> >>
> >> }
> >>
> >> I want to modify $results within the foreach. In other words,
> >> during a given pass of this iteration, I want to delete some
> >> of the items based on particular conditions. Then on the next
> >> pass thru the foreach, I want $results to be the newer, modified
> >> array.
> >>
> >> This does not seem to work. It appears that the foreach statement
> >> is implemented such that $results is read into memory at the start
> >> so that any modifications I make to it during a given pass, 
> >> are ignored
> >> on the next pass. Is this true?
> >>
> >> If so, is there a way that I can tell the foreach statement 
> >> to re-read the
> >> array $results?  Or am I just going against the grain here?
> >>
> >> -Andres
> >>
> >>
> >> -- 
> >> 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
> 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux