PHP Build a Basic PHP Website (2018) Listing and Sorting Inventory Items Working with Functions

5,820 Points

Build a Basic PHP Website Quiz $output

$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;

Why is 321 the answer?

1 Answer

28,493 Points

That code was written to be intentionally confusing, but if you break the loop down iteration by iteration you can start to see what is happening. The main thing to keep in mind is that $output is a string, not a number. And within the loop string concatenation is used to add to it.

So when this line runs:

$output = $number . $output; 

Whatever number is stored in $number is added to the beginning of the $output string. For example in the first iteration of the loop $output starts out with "" and then has 1 added at the beginning which results in "1". Then during the next iteration it starts out with "1" and then has 2 added at the start of the string, which results in "21". And the same thing happens during the third iteration.

That's the key here, we are not adding numbers together mathematically, but modifying a string by setting it equal to itself with a number added to its start. The reason why you get "321" and not "4321" is that the string concatenation only happens if the if statement runs. And it only runs if $loop is less than $count. $count hold the length of the array (4) and $loop is increased by 1 each loop. During the final loop $loop is set equal to 4, since 4 is not less than 4 the if statement does not run. Which is why 4 is not added to the $output string.