Create unlimited ul li tag from Fetch array (for list)

I'm going to make an unlimited list using li and ul tags from my PDO array results (extracted)

my array:

Array ( [0] => Array ( [category_label] => catLevel4 [category_id] => 22 [category_owner] => 21 ) [1] => Array ( [category_label] => catLevel3 [category_id] => 21 [category_owner] => 20 ) [2] => Array ( [category_label] => catLevel2 [category_id] => 23 [category_owner] => 8 ) [3] => Array ( [category_label] => catLevel2 [category_id] => 24 [category_owner] => 8 ) [4] => Array ( [category_label] => catLevel2 [category_id] => 20 [category_owner] => 6 ) [5] => Array ( [category_label] => catLevel1 [category_id] => 6 [category_owner] => 0 ) [6] => Array ( [category_label] => catLevel1 [category_id] => 7 [category_owner] => 0 ) [7] => Array ( [category_label] => catLevel1 [category_id] => 8 [category_owner] => 0 ) ) 

I want to:

 catLevel1 catLevel2 catLevel3 catLevel4 catLevel1 catLevel1 catLevel2 catLevel2 

i made a function to convert:

 function getCategory($parentCategoryId,$data) { foreach($data as $row){if($row['category_owner']==$parentCategoryId){?> <li catId='<?php echo $row['category_id']?>'><a><?php echo $row['category_label'];?></a> <ul> <?php getCategory($row['category_id'],$data) ;?> </ul> </li> <?php };} } echo getCategory(0,$this->categorysList); 

this function is very good for me, but create a null <ul></ul> for all the elements!

I appreciate your help in building a standard function, D

+4
source share
1 answer

You get null <ul> tags because you hardcode it without any checks and output at each iteration. Try something like this:

 <?php function getCategory($parentCategoryId, $data) { foreach ($data as $row) { if ($row['category_owner'] == $parentCategoryId) { $str .= ' <li catId="' . $row['category_id'] . '"><a>' . $row['category_label'] . '</a>' . "\n"; $res = getCategory($row['category_id'], $data); if ($res) { $str .= ' <ul>' . $res . '</ul> ' . "\n"; } $str .= ' </li>' . "\n"; } } return $str; } $str = getCategory(0, $data); echo $str; ?> 

So, you get the output as follows:

 <li catId="6"> <a> catLevel1</a> <ul> <li catId="20"> <a> catLevel2</a> <ul> <li catId="21"> <a> catLevel3</a> <ul> <li catId="22"> <a> catLevel4</a> </li> </ul> </li> </ul> </li> </ul> </li> <li catId="7"> <a> catLevel1</a> </li> <li catId="8"> <a> catLevel1</a> <ul> <li catId="23"> <a> catLevel2</a> </li> <li catId="24"> <a> catLevel2</a> </li> </ul> </li> 
+2
source

Source: https://habr.com/ru/post/1433093/


All Articles