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:and...@packetstorm.com] > Sent: Tuesday, June 23, 2009 11:45 AM > Cc: php-general@lists.php.net > Subject: Re: [PHP] 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:and...@packetstorm.com] > >> Sent: Tuesday, June 23, 2009 11:27 AM > >> To: php-general@lists.php.net > >> Subject: [PHP] 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