Reputation: 35
I'm trying to create nested unordered list with php loops. I've tried different things but I need your help to improve my code. Let say in this example that I want four levels.
Here is my PHP code :
<ul>
<?php
for($i = 0; $i < 1; $i++): ?>
<li>
<ul>
<?php for($j = 0; $j <2; $j++): ?>
<li>
<ul>
<?php for($k = 0; $k <2; $k++): ?>
<li>
<ul>
<?php for($l = 0; $l <2; $l++): ?>
<li></li>
<?php endfor; ?>
</ul>
</li>
<?php endfor; ?>
</ul>
</li>
<?php endfor; ?>
</ul>
</li>
<?php
endfor;
?>
</ul>
Here is my HTML output :
<ul>
<li>
<ul>
<li>
<ul>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
</ul>
</li>
<li>
<ul>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
<li>
<ul>
<li></li>
<li></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
Is there a smarter way to do so? I hope so. I would like to know because I aim to define number of levels dynamically and what I've done is not dynamic at all! :)
Thanks a lot for your replies!
Upvotes: 0
Views: 780
Reputation: 45589
You can use recursive functions if you have the array in a certain format.
$arr = array(
'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
'Aenean id erat et justo eleifend dapibus iaculis non diam.',
array(
'Donec viverra mauris sit amet nulla semper sit amet venenatis urna elementum.',
'Aliquam bibendum arcu metus, vitae pellentesque felis.',
'Etiam eu erat est, sit amet mollis justo.',
array(
'Cras luctus nulla vitae turpis bibendum rutrum.',
'Donec vel sem mi, eu viverra magna.',
'Aliquam non leo vitae turpis commodo malesuada.',
'Suspendisse congue nulla nec justo molestie convallis sodales dolor tincidunt.',
array(
'Etiam blandit dictum metus, eget ullamcorper odio commodo eu.',
'Integer congue eros a mauris feugiat volutpat.',
'Sed nec diam sem, ac sollicitudin libero.',
'Phasellus vulputate tincidunt risus, vitae convallis nisi feugiat id.',
'Donec vehicula lobortis magna, sed euismod massa tristique sed.',
),
),
'Fusce vel sem sem, non volutpat nisi.',
'Pellentesque molestie ipsum vitae orci sodales iaculis.',
),
);
function list_it($data_array, $list_tag = 'ul') {
// enforce valid list tag
if ($list_tag != 'ul' && $list_tag != 'ol')
$list_tag = 'ul';
// we need an array with data
if (!is_array($data_array) || empty($data_array))
return;
echo '<',$list_tag,'>';
foreach ($data_array as $element) {
if (is_array($element)) {
list_it($element);
}
else {
echo '<li>',$element,'</li>';
}
}
echo '</',$list_tag,'>';
}
list_it($arr, 'ul');
<ul>
<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
<li>Aenean id erat et justo eleifend dapibus iaculis non diam.</li>
<ul>
<li>Donec viverra mauris sit amet nulla semper sit amet venenatis urna elementum.</li>
<li>Aliquam bibendum arcu metus, vitae pellentesque felis.</li>
<li>Etiam eu erat est, sit amet mollis justo.</li>
<ul>
<li>Cras luctus nulla vitae turpis bibendum rutrum.</li>
<li>Donec vel sem mi, eu viverra magna.</li>
<li>Aliquam non leo vitae turpis commodo malesuada.</li>
<li>Suspendisse congue nulla nec justo molestie convallis sodales dolor tincidunt.</li>
<ul>
<li>Etiam blandit dictum metus, eget ullamcorper odio commodo eu.</li>
<li>Integer congue eros a mauris feugiat volutpat.</li>
<li>Sed nec diam sem, ac sollicitudin libero.</li>
<li>Phasellus vulputate tincidunt risus, vitae convallis nisi feugiat id.</li>
<li>Donec vehicula lobortis magna, sed euismod massa tristique sed.</li>
</ul>
</ul>
<li>Fusce vel sem sem, non volutpat nisi.</li>
<li>Pellentesque molestie ipsum vitae orci sodales iaculis.</li>
</ul>
</ul>
Upvotes: 1