Help - Search - Members - Calendar
Full Version: PHP Question - Small Script
HTMLHelp Forums > Programming > Server-side Scripting
Aush
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.
Darin McGrew
Do you understand what $counter++ does?
Aush
I thought it was supposed to add 1 everytime it looped.
Ephraim F. Moya
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.
Aush
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.
Ephraim F. Moya
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++);
Ephraim F. Moya
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?
Darin McGrew
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.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2024 Invision Power Services, Inc.