2017-12-22 38 views
0

나는 3 차원 배열에서 HTML 목록을 만들려고 노력하고 있어요 :PHP는 3D 배열에서 HTML 목록을 만드나요?

<?php 
$items = [ 
    0 => [ 
     'id' => 100, 
     'parent_id' => 0, 
     'url' => 'Home', 
     'children' => [] 
    ], 

    1 => [ 
     'id' => 101, 
     'parent_id' => 0, 
     'url' => 'About', 
     'children' => [ 
      0 => [ 
       'id' => 102, 
       'parent_id' => 101, 
       'url' => 'About 1' 
      ], 

      1 => [ 
       'id' => 102, 
       'parent_id' => 101, 
       'url' => 'About 2' 
      ], 

      2 => [ 
       'id' => 102, 
       'parent_id' => 101, 
       'url' => 'About 3' 
      ], 
     ] 
    ], 

]; 

?> 

<?php if (count($items) > 0) { ?> 
<ul> 

    <?php foreach ($items as $item) { ?> 
    <li><?php echo $item['url'];?> 

     <?php if(count($item['children']) > 0) { ?> 
      <ul class="nested"> 
       <?php foreach ($item['children'] as $subitem) { ?> 
        <li><?php echo $subitem['url'];?></li> 
       <?php } ?> 
      </ul> 
     <?php } ?> 

    </li> 
    <?php } ?> 

</ul> 
<?php } ?> 

결과 :

<ul> 
    <li>Home</li> 
    <li>About 
     <ul class="nested"> 
      <li>About 1</li> 
      <li>About 2</li> 
      <li>About 3</li> 
     </ul> 
    </li> 
</ul> 

하지만 난 후 나는 무엇을 :

<ul> 
    <li>Home</li> 
    <li>About 
     <ul class="nested"> 
      <li>About 1</li> 
     </ul> 
     <ul class="nested"> 
      <li>About 2</li> 
     </ul> 
     <ul class="nested"> 
      <li>About 3</li> 
     </ul> 
    </li> 
</ul> 

어떤 아이디어?

또는배열 구조 내가 원하는 HTML 목록을 달성하는 등 어떻게해야?

답변

2

이렇게 재귀를 추가하는 것은 어떻습니까? 차원이 얼마나 깊은 지 (3D, 4D 등)에 관계없이 목록을 관리합니다 ..

function create_list($items) { 
    if (count($items)==0) return null; // if your child item is empty 

    if (!array_key_exists('children', $items) || count($items['children'])==0) { 
     echo '<li>'.$items['url'].'</li>'; 
     return null; 
    } 

    // just to be sure we have the index 'url' 
    if (array_key_exists('url', $items)) { 
     echo '<li>'.$items['url'].'</li>'; 
    }  

    foreach($items['children'] as $child) { 
     echo "<ul class='nested'>"; 
     create_list($child);   
     echo "</ul>"; 
    } 
} 

echo "<ul>"; 
foreach($items as $item) { 
    create_list($item); 
} 
echo "</ul>";