2009-12-10 4 views
0

J'ai le tableau suivant.Comment convertir un tableau à plusieurs niveaux en ul?

Array 
(
    [24] => Array 
     (
      [id] => 24 
      [name] => Main menu 
      [shortdesc] => mainmenu 
      [status] => active 
      [parentid] => 0 
      [order] => 0 
      [children] => Array 
       (
        [65] => Array 
         (
          [id] => 65 
          [name] => Main 4 
          [shortdesc] => 
          [status] => active 
          [parentid] => 24 
          [order] => 0 
          [children] => Array 
           (
           ) 

         ) 

        [64] => Array 
         (
          [id] => 64 
          [name] => Main 3 
          [shortdesc] => 
          [status] => active 
          [parentid] => 24 
          [order] => 0 
          [children] => Array 
           (
           ) 

         ) 

        ... 
        ... 

        [59] => Array 
         (
          [id] => 59 
          [name] => Main 1 
          [shortdesc] => 
          [status] => active 
          [parentid] => 24 
          [order] => 0 
          [children] => Array 
           (
            [66] => Array 
             (
              [id] => 66 
              [name] => Main 1-1 
              [shortdesc] => 
              [status] => active 
              [parentid] => 59 
              [order] => 0 
              [children] => Array 
               (
               ) 

             ) 

           ) 

         ) 

       ) 

     ) 

    [25] => Array 
     (
      [id] => 25 
      [name] => Galleri 1 
      [shortdesc] => galleri1 
      [status] => active 
      [parentid] => 0 
      [order] => 0 
      [children] => Array 
       (
       ) 

     ) 

) 

Et je veux convertir ceci au HTML suivant par php.

<ul> 
    <li>Main menu 
     <ul> 
      <li>Main 4</li> 
      <li>Main 3</li> 
      ... 
      <li>Main 1 
       <ul> 
        <li>Main 1-1</li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
    <li>Galleri 1</li> 

</ul> 

J'ai commencé comme ça, mais je suis coincé.

if (count($navlist)){ 
    echo "\n<ul>"; 
    foreach ($navlist as $key => $list){ 
... 
... 

Toute aide sera appréciée.

Merci d'avance.

Répondre

4

Quelque chose comme ça ?:

function recursion($multi_dimensional_array) 
    { 
     $m = $multi_dimensional_array; 

     $keys = array(); 
     foreach($m as $key=>$value) 
     { 
      $keys[] = $key; 
     } 

     $i = 0; 
     while($i < count($multi_dimensional_array)) 
     { 
      echo '<li><a href="#">'.$keys[$i].'</a>'; 
      if(is_array($multi_dimensional_array[$keys[$i]])) 
      { 
       echo '<ul>'; 
       recursion($multi_dimensional_array[$keys[$i]]); 
       echo '</ul>'; 
      } 
      echo '</li>'; 
      $i++; 
     } 
    } 
+3

Pour votre information, si vous voulez obtenir une liste des clés, vous pouvez simplement utiliser array_keys() sur le tableau, comme: $ = array_keys clés ($ multi_dimensional_array); – Chris

+0

Chris, j'ai adoré votre solution. C'est vraiment laconique et au point. Merci d'avoir signalé la fonction. –

+0

Ce n'est pas un problème, je suis toujours là pour aider les gens. Merci pour ces mots gentils! – Chris

1
function arrayToUL(array $array) 
{ 
    echo '<ul>'; 
    foreach ($array as $key => $value) 
    { 
     if (isset($value['name'])) echo "<li>{$value['name']}</li>"; 
     if (!empty($value['children']) && is_array($value['children'])) 
     { 
      echo arrayToUL($value['children']); 
     } 
    } 
    echo '</ul>'; 
} 
Questions connexes