Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

PHP Build a Simple PHP Application Working With Functions Working with Functions

Emil Wallgren
Emil Wallgren
11,737 Points

Can't understand how this loop works, do you?

Hi! My name is Emil Wallgren. I'm currently doing a Quiz on Build a simple php application > working with functions > working with functions. I've seen the videos but I don't understand why the solution to this question is as it is. The question is like this:

What does the following code display:

<?php

$numbers = array(1,2,3,4);

$total = count($numbers);

$sum = 0;

$output = "";

$i = 0;

foreach($numbers as $number) {

    $i = $i + 1;

    if ($i < $total) {

        $sum = $sum + $number;

    }

}

echo $sum;

?>

I understand it like this:

$total = 4 since it counts the amount of variables in the array. $i is also 4 since it adds the number 1 everytime it loops (which is 4 times).

Then the if-statement cant execute since 4 aint less than 4.

We echo $sum which hasn't changed...so we should get 0...right?

Still when i try the code on my computer...i get 6.

Why?

3 Answers

6 is correct. Go through number by number

First, number = 1. i = 1, sum = 0+1 = 1
number = 2, i=2, sum = 1+2 = 3
number = 3, i=3, sum = 3+3 = 6
number = 4, i=4, sum is not executed.

There ya go, echo sum=6.

Emil Wallgren
Emil Wallgren
11,737 Points

Thanks Ryan.

But why ain't sum executed on number 4?

I think the only error in your understanding is that $i doesn't become 4 right away. You seem to realize that the loop will execute 4 times. This means the code inside the loop will execute 4 times. Each time through the loop only 1 is being added to $i so it doesn't become 4 until the very last time through the loop. Which means the if block is executed the first 3 times through the loop but not the 4th time as you correctly pointed out.

Emil Wallgren
Emil Wallgren
11,737 Points

Thanks Jason :-)

So the if-statement executes each time the $i is below 4. Now I get it! You helped me alot there :-)

Thanks again :-D

/E

You are correct that, when i = 4, the if statement is false, thus sum is not executed. Since this is a loop, the code is executed as many times as the loop is iterated. In this case, 4 times.

First time through, i =1, the if statement is processed true. Second time through, i=2...etc

Try adding this right before the if statement:

echo $i < $total;
Emil Wallgren
Emil Wallgren
11,737 Points

Yupp. Now I get it :-)

Thanks!

/E