Samurai Legend Posted April 12, 2022 Posted April 12, 2022 So, my lecturer gave me this task Imagine we have a database table of category information as per the below. This shows categories in a hierarchical structure indicated by a parent_id. I.e. a category with a parent_id of 1 is a sub- category of Clothing, whereas a category with a parent_id of 5 is a sub-category of Men. Any category with a sub-category of 0 is a top level category. id parent_id name 1 0 Clothing 2 0 Accessories 3 0 Watches 4 1 Women 5 1Men 6 4 Tops 7 4 Trousers 8 5 T-Shirts We would like you to create a function that produces a category breadcrumb. This function should use parameters for the required category id and the separator. For example. If I supplied 8 as the category id and ‘>’ as the separator I would expect the result to be: Clothing > Men > T-shirts If I supplied 5 as the category id and ‘/’ as the separator I would expect the result to be: Clothing / Men For the purposes of this exercise assume you have a function called getCategory($id) available to supply you with an array of the category values when the category id is passed in. For example: getCategory(8) would return Array( 'id' => 8, 'parent_id' => 5, 'name' => 'T-Shirts' ) I’ll be honest with you I don’t even know what his on about? Can someone help me out 😂😂😂 Quote
Magictallguy Posted April 12, 2022 Posted April 12, 2022 1 table, 3 columns; id, parent_id, name. We can make some guesses at what the data might actually be, based on what we see. For example, I see that `id` (the first column) is likely a primary key that auto-increments. Again, based on the data we've got and the explanation given with it, the parent_id relates to another row in the table if parent_id is greater than 0, or otherwise has no direct relation (and therefore is the parent category). Your instructions are to write a function that'll display this breadcrumb-style, based on parameters given to said function. As the question says, assume you've already got a function named getCategory() and it takes 1 parameter; the id. Can you write, say, showBreadcrumbs()? If you have a PHP-capable webserver and a DB server available to you, then start playing around (suggested only as I'm aware you're familiar with this)! Create the table with the 3 columns and insert the data as displayed - then query it. If not, or if you'd like to run this in a php sandbox online for free (hint hint), then write an array of the data instead; <?php $categories = [ [ 'id' => 1, 'parent_id' => 0, 'name' => 'Clothing', ], [ 'id' => 2, 'parent_id' => 0, 'name' => 'Accessories', ], // ... ]; There's a couple of "oh, duuuhhh" moments in this exercise. Remember; keep it simple! Quote
ags_cs4 Posted April 12, 2022 Posted April 12, 2022 this have what you want https://stackoverflow.com/questions/59670108/convert-php-array-of-categories-to-html-breadcrumbs-for-multiple-sub-categories Quote
Samurai Legend Posted April 12, 2022 Author Posted April 12, 2022 @Magictallguy @ags_cs4 Thanks guy, both were very useful and I appreciate it! Now I have a problem the wording is flipped. So when I click on trousers this is what appears. I need it to show Trousers > Women > Clothing I need it to show Clothing > Women > Trousers <?php $_GET['id'] = (isset($_GET['id']) && is_numeric($_GET['id'])) ? abs(intval($_GET['id'])) : ''; if (!isset($_GET['action'])) { $_GET['action'] = ''; } switch($_GET['action']) { case "view": view(); break; default: index(); break; } function index() { ?><table width = '100%'> <tr> <th> <a href = 'task.php?action=view&id=1'>Clothing</a><br/><br/> <a href = 'task.php?action=view&id=4'>Women</a> > <a href = 'task.php?action=view&id=6'>Tops</a> > <a href = 'task.php?action=view&id=7'>Trousers</a><br/><br/> <a href = 'task.php?action=view&id=5'>Men</a> > <a href = 'task.php?action=view&id=8'>T-Shirts</a> </th> <th><a href = 'task.php?action=view&id=2'>Accessories</a></th> <th><a href = 'task.php?action=view&id=3'>Watches</a></th> </tr> </table><?php } function view() { if (empty($_GET['id'])) { ?>Invalid entry.<?php exit(); } $category = array( 1 => array( 'id' => 1, 'parentID' => 0, 'name' => 'Clothing' ), 2 => array( 'id' => 2, 'parentID' => 0, 'name' => 'Accessories' ), 3 => array( 'id' => 3, 'parentID' => 0, 'name' => 'Watches' ), 4 => array( 'id' => 4, 'parentID' => 1, 'name' => 'Women' ), 5 => array( 'id' => 5, 'parentID' => 1, 'name' => 'Men' ), 6 => array( 'id' => 6, 'parentID' => 4, 'name' => 'Tops' ), 7 => array( 'id' => 7, 'parentID' => 4, 'name' => 'Trousers' ), 8 => array( 'id' => 8, 'parentID' => 5, 'name' => 'T-Shirts' ), ); function breadcrumber($array, $id){ static $result = []; // declare the storage variable without losing elements during recursion if(isset($array[$id])) { // if target exists $result[] = $array[$id]['name']; // store title text $parent = $array[$id]['parentID']; // assign new target unset($array[$id]); // remove possibility of an infinite loop breadcrumber($array, $parent); // recurse } return $result; } echo implode(' > ',breadcrumber(array_column($category, NULL, 'id'), $_GET['id'])); } ?> Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.