Re: [PHP] endless while loop

2005-01-06 Thread Jason Wong
On Thursday 06 January 2005 05:17, Gunter Sammet wrote:

 I am having some trouble getting the following code to work:

 if (is_array($bundle_attributes)) {

 reset($bundle_attributes);

 while (list($option, $value) = each($bundle_attributes)) {

 reset($value);

 while (list($option2, $value2) = each($value)) {

 $this-contents[$products_id]['attributes'][$option] = $value;

 if (tep_session_is_registered('customer_id')) tep_db_query(insert into  .
 TABLE_CUSTOMERS_BASKET_BUNDLE_ATTRIBUTES .  (customers_id, products_id,
 sub_product_id, products_options_id, products_options_value_id) values ('
 . (int)$customer_id . ', ' . tep_db_input($products_id) . ', ' .
 $option . ', ' . (int)$option2 . ', ' . (int)$value2 . '));

 }

 }

 }

 }

 It gives me an endless loop in the second while loop. It seems like it
 doesn't move the pointer to the next value in the $option array. 

But isn't the next value of $option controlled by the outer while-loop?

 When I do 
 a print in that loop, I am getting the key value pair for the first element
 in the $option array. 

So inside the inner while-loop, $option should never change.

 Changing it to a for loop works. Any ideas why this 
 happens?

No. But I can tell you that:

1) the reset() aren't necessary
2) even better, use a foreach-loop instead of while-loop

-- 
Jason Wong - Gremlins Associates - www.gremlins.biz
Open Source Software Systems Integrators
* Web Design  Hosting * Internet  Intranet Applications Development *
--
Search the list archives before you post
http://marc.theaimsgroup.com/?l=php-general
--
New Year Resolution: Ignore top posted posts

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



Re: [PHP] endless while loop

2005-01-06 Thread Gunter Sammet
Jason Wong [EMAIL PROTECTED] wrote in message 
news:[EMAIL PROTECTED]
 On Thursday 06 January 2005 05:17, Gunter Sammet wrote:

 I am having some trouble getting the following code to work:

 if (is_array($bundle_attributes)) {

 reset($bundle_attributes);

 while (list($option, $value) = each($bundle_attributes)) {

 reset($value);

 while (list($option2, $value2) = each($value)) {

 $this-contents[$products_id]['attributes'][$option] = $value;

 if (tep_session_is_registered('customer_id')) tep_db_query(insert into  
 .
 TABLE_CUSTOMERS_BASKET_BUNDLE_ATTRIBUTES .  (customers_id, products_id,
 sub_product_id, products_options_id, products_options_value_id) values 
 ('
 . (int)$customer_id . ', ' . tep_db_input($products_id) . ', ' .
 $option . ', ' . (int)$option2 . ', ' . (int)$value2 . '));

 }

 }

 }

 }

 It gives me an endless loop in the second while loop. It seems like it
 doesn't move the pointer to the next value in the $option array.

 But isn't the next value of $option controlled by the outer while-loop?

 When I do
 a print in that loop, I am getting the key value pair for the first 
 element
 in the $option array.

 So inside the inner while-loop, $option should never change.

 Changing it to a for loop works. Any ideas why this
 happens?

 No. But I can tell you that:

 1) the reset() aren't necessary
 2) even better, use a foreach-loop instead of while-loop

 -- 
 Jason Wong - Gremlins Associates - www.gremlins.biz
 Open Source Software Systems Integrators
 * Web Design  Hosting * Internet  Intranet Applications Development *
 --
 Search the list archives before you post
 http://marc.theaimsgroup.com/?l=php-general
 --
 New Year Resolution: Ignore top posted posts

Hi Jason:
Thanks for the reply.

I added some of the reset in just to make sure the pointer isn't somewhere 
else through earlier iterations/to make sure it doesn't make a difference.
Will play around with the foreach as soon as I have some time. Reading 
through php.net it seems like there are a few pitfalls (as there can be with 
while) to watch out for.

Found out what the problem was after I posted. Reading through the function 
manual for each I found the following:
snip
 Caution
Because assigning an array to another variable resets the original arrays 
pointer, our example above would cause an endless loop had we assigned 
$fruit to another variable inside the loop.

/snip

That's what I did. Didn't had to but it has been a copy and paste from some 
other code I haven't cleaned up. Good thing on it is, that I now know that I 
can't do this.

Thanks again!

Gunter

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



[PHP] endless while loop

2005-01-05 Thread Gunter Sammet
Hi all:
I am having some trouble getting the following code to work:

if (is_array($bundle_attributes)) {

reset($bundle_attributes);

while (list($option, $value) = each($bundle_attributes)) {

reset($value);

while (list($option2, $value2) = each($value)) {

$this-contents[$products_id]['attributes'][$option] = $value;

if (tep_session_is_registered('customer_id')) tep_db_query(insert into  . 
TABLE_CUSTOMERS_BASKET_BUNDLE_ATTRIBUTES .  (customers_id, products_id, 
sub_product_id, products_options_id, products_options_value_id) values (' . 
(int)$customer_id . ', ' . tep_db_input($products_id) . ', ' . $option . 
', ' . (int)$option2 . ', ' . (int)$value2 . '));

}

}

}

}

It gives me an endless loop in the second while loop. It seems like it 
doesn't move the pointer to the next value in the $option array. When I do a 
print in that loop, I am getting the key value pair for the first element in 
the $option array. Changing it to a for loop works. Any ideas why this 
happens?

TIA

Gunter

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