Tried, gives the same result with one element :(
What's working:
$cats = array( array( 'id' => 1 ) );
while ( $c = array_shift($cats) ) {
echo $c['id'];
if ( $c['id'] < 5 ) {
$c['id']++;
$cats[] = $c;
}
}
But this is 'while' and it pops all elements from the array...
Cheers,
Tamas
-----Original Message-----
From: Louis Huppenbauer [mailto:[email protected]]
Sent: Tuesday, July 05, 2011 4:12 PM
To: Robert Cummings
Cc: Dajka Tamas; [email protected]
Subject: Re: [PHP] Foreach question
Or maybe he tried to do the following?
<?php
foreach ( $cats as&$c ) {
echo $c['id'];
if ($c['id']< 5) {
$cats[] = array('id' => ($c['id'] + 1));
}
}
?>
2011/7/5 Robert Cummings <[email protected]>:
>
> On 11-07-05 09:40 AM, Dajka Tamas wrote:
>>
>> Hi all,
>>
>>
>>
>> I've bumped into an interesting thing with foreach. I really don't know,
>> if
>> this is normal working, or why it is, so I got curious.
>>
>>
>>
>> The script:
>>
>>
>>
>> foreach ( $cats as&$c ) {
>>
>> echo $c['id'];
>>
>> if ( $c['id']< 5 ) {
>>
>> $c['id']++;
>>
>> $cats[] = $c;
>>
>> }
>>
>> }
>
> That's a bizarre loop... you're feeding references to elements of the array
> back into the array over which the loop is iterating. If you REALLY want to
> do what you are doing, then do the following:
>
> <?php
>
> foreach( array_keys( $cats ) as $key )
> {
> $c = &$cats[$key];
>
> echo $c['id'];
>
> if( $c['id'] < 5 )
> {
> $c['id']++;
> $cats[] = $c;
> }
> }
>
> ?>
>
> Cheers,
> Rob.
> --
> E-Mail Disclaimer: Information contained in this message and any
> attached documents is considered confidential and legally protected.
> This message is intended solely for the addressee(s). Disclosure,
> copying, and distribution are prohibited unless authorized.
>
> --
> 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