Reputation: 150
I am using this function to display UL list:
function getList($arResult){
$diff = 0;
foreach($arResult as $result){
if($lastlevel != $result[depth]){
if($lastlevel < $result[depth]){
$html .= "<ul>\n";
$diff++;
}
else {
$html .= "</li>\n</ul>\n</li>\n";
$diff--;
}
}
else
$html .= "</li>\n";
$html .= "<li>$result[cat_name]";
$lastlevel = $result[depth];
}
$html .= str_repeat("</li>\n</ul>\n", $diff);
return $html;
}
The $arResult
contains a tree like this:
Electronics
TV
Video
Old Movies
New Movies
Hollywood
Old hollywood
New HollyWood
Rotten Hollywood
Other Movies
Mobile
Nokia
Apple
Micromax
Laptop
Other
The above function prints everything under Electronics->Tv
while the truth is that under Electronics
there should be TV, Video, Mobile Laptop, Other
..
This function somehow is putting ul li
in incorrect mode.
The Array Dump is here:
array(10) {
[0]=>
array(6) {
["cat_ID"]=>
string(3) "197"
["cat_name"]=>
string(13) "Student Corner"
["cat_nicename"]=>
string(13) "student-corder"
["parent"]=>
string(1) "0"
["post_count"]=>
string(1) "0"
["depth"]=>
string(1) "0"
}
[1]=>
array(6) {
["cat_ID"]=>
string(3) "198"
["cat_name"]=>
string(6) "GujCET"
["cat_nicename"]=>
string(13) "gujcet-gujrat"
["parent"]=>
string(3) "197"
["post_count"]=>
string(1) "0"
["depth"]=>
string(1) "1"
}
[2]=>
array(6) {
["cat_ID"]=>
string(3) "199"
["cat_name"]=>
string(13) "Sample Papers"
["cat_nicename"]=>
string(20) "sample-papers-gujcet"
["parent"]=>
string(3) "198"
["post_count"]=>
string(1) "1"
["depth"]=>
string(1) "2"
}
[3]=>
array(6) {
["cat_ID"]=>
string(3) "200"
["cat_name"]=>
string(8) "Syllabus"
["cat_nicename"]=>
string(15) "syllabus-gujcet"
["parent"]=>
string(3) "198"
["post_count"]=>
string(1) "8"
["depth"]=>
string(1) "2"
}
[4]=>
array(6) {
["cat_ID"]=>
string(3) "201"
["cat_name"]=>
string(4) "News"
["cat_nicename"]=>
string(11) "news-gujrat"
["parent"]=>
string(3) "197"
["post_count"]=>
string(1) "1"
["depth"]=>
string(1) "1"
}
[5]=>
array(6) {
["cat_ID"]=>
string(3) "202"
["cat_name"]=>
string(13) "Question Bank"
["cat_nicename"]=>
string(20) "question-bank-gujrat"
["parent"]=>
string(3) "197"
["post_count"]=>
string(1) "0"
["depth"]=>
string(1) "1"
}
[6]=>
array(6) {
["cat_ID"]=>
string(3) "203"
["cat_name"]=>
string(7) "Class X"
["cat_nicename"]=>
string(28) "class-x-gujrat-question-bank"
["parent"]=>
string(3) "202"
["post_count"]=>
string(1) "2"
["depth"]=>
string(1) "2"
}
[7]=>
array(6) {
["cat_ID"]=>
string(3) "204"
["cat_name"]=>
string(9) "Class XII"
["cat_nicename"]=>
string(30) "class-xii-gujrat-question-bank"
["parent"]=>
string(3) "202"
["post_count"]=>
string(1) "4"
["depth"]=>
string(1) "2"
}
[8]=>
array(6) {
["cat_ID"]=>
string(3) "205"
["cat_name"]=>
string(7) "Results"
["cat_nicename"]=>
string(15) "results-gujarat"
["parent"]=>
string(3) "197"
["post_count"]=>
string(1) "1"
["depth"]=>
string(1) "1"
}
[9]=>
array(6) {
["cat_ID"]=>
string(3) "206"
["cat_name"]=>
string(10) "About GSEB"
["cat_nicename"]=>
string(10) "about-gseb"
["parent"]=>
string(3) "197"
["post_count"]=>
string(1) "1"
["depth"]=>
string(1) "1"
}
}
Upvotes: 0
Views: 203
Reputation: 373
You are not opeaning the <li>
tags you are closing it here,
fix this and try,
else {
$html .= "</li>\n</ul>\n</li>\n";
$diff--;
}
Upvotes: 0
Reputation: 522085
Way too complicated a function. Something along these lines does it:
function treeList(array $data) {
$list = '<ul>';
foreach ($data as $item) {
$list .= '<li>';
$list .= $item['name'];
if (!empty($item['children'])) {
$list .= treeList($item['children']);
}
$list .= '</li>';
}
$list .= '</ul>';
return $list;
}
$data = array(
array(
'name' => 'Foo',
'children' => array(
array(
'name' => 'Bar'
)
)
)
);
echo treeList($data);
Upvotes: 1