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:[email protected]]
> Sent: Tuesday, June 23, 2009 11:45 AM
> Cc: [email protected]
> 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:[email protected]]
> >> Sent: Tuesday, June 23, 2009 11:27 AM
> >> To: [email protected]
> >> 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