The Web Design Group

... Making the Web accessible to all.

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> PHP Question - Small Script
Aush
post Mar 24 2012, 07:37 PM
Post #1


Novice
**

Group: Members
Posts: 25
Joined: 8-February 10
Member No.: 11,027



I have a very small script that I need help with. I'm learning PHP, and I can't figure out why this loop won't work. Please help! =]

Here it is:

<?PHP
$counter = 0;
$start = 1;

for($start; $start < 11; $start++) {
$counter = $counter++;
print $counter . "<BR>";
}

?>

It DOES work when I do this, however:

<?PHP
$counter = 0;
$start = 1;

for($start; $start < 11; $start++) {
$counter = $counter + 1;
print $counter . "<BR>";
}

?>

I bolded the difference between the two. Thank you very much.
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Darin McGrew
post Mar 24 2012, 08:08 PM
Post #2


WDG Member
********

Group: Root Admin
Posts: 8,365
Joined: 4-August 06
From: Mountain View, CA
Member No.: 3



Do you understand what $counter++ does?
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Aush
post Mar 24 2012, 08:48 PM
Post #3


Novice
**

Group: Members
Posts: 25
Joined: 8-February 10
Member No.: 11,027



I thought it was supposed to add 1 everytime it looped.
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Ephraim F. Moya
post Mar 24 2012, 09:31 PM
Post #4


Advanced Member
****

Group: Members
Posts: 167
Joined: 2-September 07
From: New Mexico
Member No.: 3,702



QUOTE(Aush @ Mar 24 2012, 05:37 PM) *

I have a very small script that I need help with. I'm learning PHP, and I can't figure out why this loop won't work. Please help! =]

Here it is:

<?PHP
$counter = 0;
$start = 1;

for($start; $start < 11; $start++) {
$counter = $counter++;
print $counter . "<BR>";
}

?>

It DOES work when I do this, however:

<?PHP
$counter = 0;
$start = 1;

for($start; $start < 11; $start++) {
$counter = $counter + 1;
print $counter . "<BR>";
}

?>

I bolded the difference between the two. Thank you very much.


With the ++ after the variable ($v++) the variable is used first then it's incremented.
With the ++ before the variable (++$v) the variable is incremented before use.

So What you want is $counter = ++$counter;

Or maybe just $counter++; by itself.

Or ++$counter; by itself.
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Aush
post Mar 25 2012, 01:13 PM
Post #5


Novice
**

Group: Members
Posts: 25
Joined: 8-February 10
Member No.: 11,027



Thank you for the response. smile.gif

I still have a question, though. Even if $counter is incremented after using it, shouldn't it still add 1 each time, since it's looping?

I don't see why it makes a difference whether it's used before or after.
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Ephraim F. Moya
post Mar 25 2012, 01:55 PM
Post #6


Advanced Member
****

Group: Members
Posts: 167
Joined: 2-September 07
From: New Mexico
Member No.: 3,702



QUOTE(Aush @ Mar 25 2012, 11:13 AM) *

Thank you for the response. smile.gif

I still have a question, though. Even if $counter is incremented after using it, shouldn't it still add 1 each time, since it's looping?

I don't see why it makes a difference whether it's used before or after.


Because $counter = $counter++ IS ALWAYS ZERO!

You might be interested in this more efficient way of writing your loop:

<?php

for( $start = 1, $counter = 0; $start < 11; $start++ )
{
echo "{$counter++}. <br>";
}

or:

for( $start = 0, $counter = 0; $start < 10; echo "{$counter++} <br>", $start++);


This post has been edited by Ephraim F. Moya: Mar 25 2012, 02:54 PM
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Ephraim F. Moya
post Mar 25 2012, 10:42 PM
Post #7


Advanced Member
****

Group: Members
Posts: 167
Joined: 2-September 07
From: New Mexico
Member No.: 3,702



QUOTE(Ephraim F. Moya @ Mar 25 2012, 11:55 AM) *

QUOTE(Aush @ Mar 25 2012, 11:13 AM) *

Thank you for the response. smile.gif

I still have a question, though. Even if $counter is incremented after using it, shouldn't it still add 1 each time, since it's looping?

I don't see why it makes a difference whether it's used before or after.


Because $counter = $counter++ IS ALWAYS ZERO!

You might be interested in this more efficient way of writing your loop:

<?php

for( $start = 1, $counter = 0; $start < 11; $start++ )
{
echo "{$counter++}. <br>";
}

or:

for( $start = 0, $counter = 0; $start < 10; echo "{$counter++} <br>", $start++);


I found an error in my second example above. It should be:

<?php
for( $start = 0, $counter = 0; $start < 10; print "{$counter}<br>", $counter++, $start++ );
?>

The double brace {} can't have any computation.
Darn!

Guys - Can an entry be edited after the [Edit] button disappears? If so, how?

This post has been edited by Ephraim F. Moya: Mar 25 2012, 11:20 PM
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post
Darin McGrew
post Mar 25 2012, 11:29 PM
Post #8


WDG Member
********

Group: Root Admin
Posts: 8,365
Joined: 4-August 06
From: Mountain View, CA
Member No.: 3



Let's walk through what happens. We start with ($counter == 0):

$counter = $counter++;

First, $counter is incremented by the ++ operator, thus ($counter == 1). Next, the original value of $counter (that is, 0) is returned by the ++ operator. Then that value is assigned to $counter by the = operator.

Let's look at it again with the working statement:

$counter++;

First, $counter is incremented by the ++ operator, thus ($counter == 1), just as before. Next, the original value of $counter (that is, 0) is returned by the ++ operator, just as before. However, that original value is then ignored, instead of being assigned to $counter the way it was before.
User is offlinePM
Go to the top of the page
Toggle Multi-post QuotingQuote Post

Reply to this topicStart new topic
2 User(s) are reading this topic (2 Guests and 0 Anonymous Users)
0 Members:

 



- Lo-Fi Version Time is now: 28th March 2024 - 02:58 AM