PHP Build a Basic PHP Website (2018) Listing and Sorting Inventory Items Random Fun with Arrays

jlampstack
jlampstack
17,752 Points

How would we write this loop NOT using a function?

I am revisiting this a year later and still having trouble understanding this. I know how to do it, but I simply don't understand. I keep getting crossed up with the $id and $Item.

Can anyone show an example WITHOUT using the function we created?

Thanks in advance!

1 Answer

Jennifer Nordell
STAFF
Jennifer Nordell
Treehouse Staff

Hi there! Sure, we can do that!

   <ul class="items">
            <?php
            foreach ($catalog as $id=>$item) {
                // echo get_item_html($id,$item);
              $output = "<li><a href='#'><img src='" 
              . $item["img"] . "' alt='" 
              . $item["title"] . "' />" 
              . "<p>View Details</p>"
              . "</a></li>";
              echo $output;
            }
            ?>                              
</ul>

There you go. But I feel like it's not the code that's tripping you up or maybe even the variable names, but rather what is stored in that $catalog. So I'm going to take a look at one at random.

$catalog[201] = [
    "title" => "Forrest Gump",
    "img" => "img/media/forest_gump.jpg",
    "genre" => "Drama",
    "format" => "DVD",
    "year" => 1994,
    "category" => "Movies",
    "director" => "Robert Zemeckis",
    "writers" => [
        "Winston Groom",
        "Eric Roth"
    ],
    "stars" => [
        "Tom Hanks",
        "Rebecca Williams",
        "Sally Field",
        "Michael Conner Humphreys"
    ]
];

The $catalog is an array containing books, movies, and music. Each book, movie, or music resides at a particular index in that $catalog array. So it's just as well to use the index as the $id as anything else, since it must be unique. Inside that entry is a set of key-value pairs. Those key-value pairs comprise the $item as a whole.

In the above code, $id will be equal to 201. That is the index at which this $item is sitting.

Hope this helps somewhat! :sparkles:

jlampstack
jlampstack
17,752 Points

Thanks Jennifer. This is a great explanation! The variable names were tripping me up. For the example I was talking about was for the index.php page for the array_rand($catalog, 4) exercise. This part of the exercise I understand. Are you able to help me with the index page? Thanks!

Jennifer Nordell
Jennifer Nordell
Treehouse Staff

jaycode The part I posted in the first black box there is in the index.php page. The only thing I didn't do was do the random bit. But if you want that, too, then here we go:

<ul class="items">
            <?php
             $random = array_rand($catalog, 4);
            foreach ($random as $id) {
                // echo get_item_html($id,$item);
              $output = "<li><a href='#'><img src='" 
              . $catalog[$id]["img"] . "' alt='" 
              . $catalog[$id]["title"] . "' />" 
              . "<p>View Details</p>"
              . "</a></li>";
              echo $output;
            }
            ?>                              
</ul>

That $random variable now contains four "keys" or "indexes" (depending on how semantically correct you want to be). They are integers. And they represent 4 indexes that are currently present in our $catalog. So if it rolled 102, 201, 204, and 303, then we would expect to see "Clean Code: A Handbook of Agile Software Craftsmanship", "Forrest Gump", "The Princess Bride" and "No Fences". This is how that code would look without the function.

So for each integer in the $random array, set that integer to be the value for $id during this iteration. If the first number was 102 then take a look at $catalog[102].

$catalog[102] = [
    "title" => "Clean Code: A Handbook of Agile Software Craftsmanship",
    "img" => "img/media/clean_code.jpg",
    "genre" => "Tech",
    "format" => "Ebook",
    "year" => 2008,
    "category" => "Books",
    "authors" => [
        "Robert C. Martin"
    ],
    "publisher" => "Prentice Hall",
    "isbn" => '978-0132350884'
];

On the first iteration: $catalog[$id]["title"] will be equal to "Clean Code: A Handbook of Agile Software Craftsmanship". Obviously, you could access any other properties you like here as well.

The next iteration of the loop it will get $catalog[201] and so forth.

Hope this helps clarify things! :sparkles: