Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community!
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial

Jake White
41,730 PointsArray_reverse
Just curious Randy Hoyt, I have a product page that shows a large list of designs. Ive followed your courses on how to show the four newest on the home page. Heres the issue that I'm having though. The way the code works that you've showed us, it displays the last four on the list of products as the newest. The way Im building my site however, the newest designs are the first four, that way when users go to the product page, they see the newest designs first. Ive tried to use array_reverse but I've found that all that does is reverse the order of the last four on the home page. Do you have any suggestions?
8 Answers

Julien Gascard
12,818 PointsJust replace
if ($total_products - $position < 4) {
by
if($position < 4) {
Than you should get the elements number 0, 1, 2 and 3 of your array, instead of last, last - 1, last - 2 and last - 3.
Hope it helps !

Randy Hoyt
Treehouse Guest Teacher(A) This conditional is true for the last four elements in the array:
if ($total_products - $position < 4) {
$recent[] = $still;
}
(B) This conditional is true for the first four elements in the array:
if ($position <= 4) {
$recent[] = $still;
}
That checks if position is less than or equal to 4. Change the conditional in your code from A to B.
Does that help?

Ernest Grzybowski
Treehouse Project ReviewerAre you using MYSQL? If you are then you could simply sort in a query. Haven't gone through the PHP course here so I'm not 100% of the route that they take. Can you reply with which lesson you've gotten up to in PHP?

Jake White
41,730 PointsNo I've been following the php courses. We've put all the products in arrays and use functions to display them

Mike Costa
Courses Plus Student 26,362 PointsHey Jake,
If you're using the Treehouse php courses and following them exactly, without looking at your code, the only thing I can suggest trying would be to use array_reverse on the products array in the get_products_all function.
function get_products_all() {
// your product code
return array_reverse($products);
}
Hope this helps.

Randy Hoyt
Treehouse Guest TeacherWould you be able to share this block of code so we can see how it's different than the project code?
On the home page, we have a foreach loop that goes through all of the shirts. That foreach loop has a counter that knows the position of the current shirt. Inside the foreach loop, we have a conditional that checks if the shirt's position subtracted from the total number of shirts is less than four; that will display the last four shirts.
In your case, you want to display the first four shirts. Is that right? You can change the conditional ... I think checking if the shirt's position is less than or equal to 4 should work.

Jake White
41,730 PointsHere's the code My get_products_recent function function get_products_recent(){
$recent = array();
$all = get_products_all();
$total_products = count($all);
$position = 0;
foreach($all as $still) {
$position = $position + 1;
if ($total_products - $position < 4) {
$recent[] = $still;
}
}
return $recent;
};
Let's assume that i have ten stills, each named in order (1,2,3,etc.) and 1 being the newest. When I call on my home page this code <?php include('inc/still.php'); $recent = get_products_recent();?> <ul class="newestProducts"> <?php $list_view_html = ""; foreach($recent as $still) { $list_view_html = $list_view_html . get_list_view_html($still); }
echo $list_view_html;
?>
</ul>
...it give stills 7-10. I want stills 1-4 to show. Ive tried the the array_reverse when returning $recent in the get_products_recent function, but it returns 10-7.

Jake White
41,730 PointsSorry about how my code appears. It always seems to mess up, even with doing the 4 spaces.

Mike Costa
Courses Plus Student 26,362 PointsIn your code, have you tried array_reverse($all)?

Randy Hoyt
Treehouse Guest Teacher(PS: For better code formatting in this forum, you can fence your code blocks with backticks instead of using four spaces. Check out GitHub's Markdown documentation for an example: [https://help.github.com/articles/github-flavored-markdown#fenced-code-blocks].)
Jake White
41,730 PointsJake White
41,730 PointsThis almost worked. All I had to do was change the 4 to a 5. Thanks for the help. While building it out originally, I changed it to if ($total_products - $position > 4) {
The problem with that was that every time I added a product, I would have to increase the integer by one. Something had to change. Thanks for the help everyone