Anidados bucles ‘for’ en PHP para crear una lista jerárquica desordenada

Estoy intentando crear una lista desordenada anidada con bucles php. He intentado cosas diferentes, pero necesito tu ayuda para mejorar mi código. Digamos en este ejemplo que quiero cuatro niveles.

Aquí está mi código PHP:

    <?php for($i = 0; $i
    • <?php for($j = 0; $j
      • <?php for($k = 0; $k
        • <?php for($l = 0; $l

Aquí está mi resultado HTML:

 

¿Hay alguna manera más inteligente de hacerlo? Eso espero. Me gustaría saber porque mi objective es definir la cantidad de niveles dinámicamente y lo que hice no es para nada dynamic. 🙂

¡Muchas gracias por sus respuestas!

Puede usar funciones recursivas si tiene la matriz en un formato determinado.

1. Matriz de ejemplo

 $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.', ), ); 

2. La función recursiva

 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 '
  • ',$element,'
  • '; } } echo ''; } list_it($arr, 'ul');

    3. Salida (hendidura de HTML agregada por mí, no la función)

     
    • Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    • Aenean id erat et justo eleifend dapibus iaculis non diam.
    • 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.
    • 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.
    • 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.