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.

Matt Nickolls
9,894 PointsCan anyone tell me why the below code outputs the array in reverse?
Quiz Question 1 of 8 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;
?>
Thanks all
Edited to add markdown
2 Answers

Jennifer Nordell
Treehouse TeacherHi there, Matt Nickolls! I took the liberty of adding some markdown to your question so that it is a bit easier to read. Sure, I can guide you through why this is the case.
The first thing to keep in mind is that $output
is an empty string and we're going to be concatenating it onto the end of another string each iteration.
Here's the loop part:
foreach($numbers as $number) {
$loop = $loop + 1;
if ($loop < $total) {
$output = $number . $output;
}
}
At the first iteration, $number
will be equal to 1. $loop
will also be set to 1. The $total
variable holds the number of numbers in that array. So it is 4 and will not change. Is 1 less than 4? Yes, it is. So take the empty string and set it to the $number
concatenated with the empty string and overwrite $output
. So now $output
is the result of "1" concatenated with ""
, which gives $output
the value of "1"
.
Now onto the second iteration. The $number
is now 2 and $loop
is now 2. Is 2 less than 4? Yes, it is. So take $output
which is now the string "1"
and set it equal to the number (which is 2) concatenated with $output ("1") on the end. Now $output
is equal to "21"
. Because we're taking the number and concatenating the previous version of $output
on the end.
Third iteration. $number
is now 3. $loop
is 3. Is 3 less than 4? Yup. $output is "21". So we take the number (which is 3) and concatenate "21"
onto the end of 3 and overwrite $output
. The $output
variable now has a value of "321".
Final iteration. $number
is now 4. $loop
is 4. Is 4 less than 4? Nope. Loop ends here.
So then we echo out the value of $output
which is "321"
.
Hope this helps!
edited for additional information
It's the order of the concatenation that's important here. If this line:
$output = $number . $output;
had instead been...
$output = $output . $number;
then it would have echoed out "123"

Matt Nickolls
9,894 PointsThanks Jennifer, makes total sense.