 # Read these codes, my answer is 1234, but it's wrong. Can anyone point out my mistakes?

What does the following code display?

\$numbers = array(1,2,3,4); \$total = count(\$numbers); \$sum = 0; \$output = ""; \$loop = 0;

foreach(\$numbers as \$number) { \$loop = \$loop + 1; if (\$loop < \$total) { \$output = \$number . \$output; } }

echo \$output;

?> The actual output is "321" not "1234"

You have 2 mistakes that pop out.

1. The loop checks for less than 4, not less than or equal to 4, so it never processes the 4th array entry
2. The concat is putting the current value of \$number before the previous values - `\$output = \$number . \$output;` .

If you run the following code with some extra `echo` statements, hopefully you can see the inner details:

```<?php
\$numbers = array(1,2,3,4);
\$total = count(\$numbers);
\$sum = 0;
\$output = "";
\$loop = 0;

foreach(\$numbers as \$number) {
echo "<br>In For Each, number is \$number";
\$loop = \$loop + 1;
if (\$loop < \$total) {
echo "<br>In If loop is \$loop";
echo "<br>In If total is \$total";
echo "<br>In If, output before is \$output";
\$output = \$number . \$output;
echo "<br>In If, output after is \$output";
}
}
echo "<br> <br>";
echo \$output;

?>
```

Which produces the following output - notice the final output is "321" not "1234":

```In For Each, number is 1
In If loop is 1
In If total is 4
In If, output before is
In If, output after is 1
In For Each, number is 2
In If loop is 2
In If total is 4
In If, output before is 1
In If, output after is 21
In For Each, number is 3
In If loop is 3
In If total is 4
In If, output before is 21
In If, output after is 321
In For Each, number is 4

321
```

Hi Amy,

I'll try to break down the stages of the loop, so you can understand what is happening.

First time around the loop:

```<?php

\$output = ""
\$total = 4;
\$loop = 0 + 1; // 1

// is \$loop < \$total (is 1 less than 4)? Yes, so add \$number to the beginning of \$output (known as prepending)
// \$output = "1"
// Go around the loop again.

?>
```

Second time around the loop:

```<?php

\$output = "1"
\$total = 4;
\$loop = 1 + 1; // 2
// Is \$loop < \$total (is 2 less than 4)? Yes, so prepend \$number to \$output,
//\$output = "21"
// Go around the loop again.

?>
```

3rd Time around the loop

```<?php

\$output = "21"
\$total = 4;
\$loop = 2 + 1 // 3

// Is \$loop < \$total (is 3 less than 4)? Yes, so prepend \$number to \$output
// \$output = "321"
// Go around the loop again.

?>
```

4th Time around the loop

```<?php

\$output = "321"
\$total = 4;
\$loop = 3 + 1 // 4
// Is \$loop < \$total (is 4 less then 4)? No, so exit the loop.
// Note: We don't output anything this time, because we have exited the loop before reaching the echo statement.

?>
```

Finally we echo out \$output, which contains the string "321"

The tricky thing here, besides the loop itself, is the way we prepend (rather than append) \$number to the \$output string

If you were to change the line

```\$output = \$number . \$output;
```

to

```\$output = \$output . \$number
```

You would get "123" instead. As the number will be added to the end of the string, rather than the beginning.

I added some echo statements to the code, so you can see what is happening each time around the loop:

```<?php

\$numbers = array(1,2,3,4);
\$total = count(\$numbers);
\$sum = 0;
\$output = "";
\$loop = 0;

foreach(\$numbers as \$number) {
\$loop = \$loop + 1;
if (\$loop < \$total) {
\$output = \$number . \$output;
echo "\\$loop = " . \$loop . ", ";
echo "\\$number = " . \$number . ", ";
echo "\\$total = " . \$total . ", ";
echo "\\$output = " . \$output . ", ";
echo "<br/>";
}
}

echo \$output;

?>
```

Hope this helps :)