2015-07-27 8 views
4

Вот что у меня есть:Как перебирать вложенные массивы?

$nav = array (
    "page 1" => array (
     "page 1.1" => array (
      "page 1.1.1" 
      "page 1.1.2" 
     ) , 
     "page 1.2" 
    ) 
    "page 2" => array (
     "page 2.1" 
    ) 
); 

И вот что я хочу:

<nav> 
    <ul> 
     <li>page 1 
      <ul> 
       <li>page 1.1 
        <ul> 
         <li>page 1.1.1</li> 
         <li>page 1.1.2</li> 
        </ul> 
       </li> 
       <li>page 1.2</li> 
      </ul> 
     </li> 
     <li>page 2 
      <ul> 
       <li>page 2.1</li> 
      </ul> 
     </li> 
    </ul> 
</nav> 

То, что я до сих пор:

foreach ($nav as $key => $val) { 
    if (!is_numeric($key)) { 
     $nav_entry = $key; 
    } else { 
     $nav_entry = $val; 
    } 
    echo "<li>" . $nav_entry . "</li>"; 
} 

Моя проблема в том, что, мне нужно иметь этот цикл foreach, если и когда есть дочерний массив. Кроме того, мне нужно как-то поместиться в заявлении if, чтобы добавить в тег <ul></ul> ...

Я начал видеть звезды ... слишком запутанными.

+0

Где «дом» вписывается в ваш выход? –

+0

@RobertCathey Извините! Это была путаница на моей стороне от работы на реальной странице. >> Удаление. – reanseih

+0

У меня его почти нет. Просто странная проблема. –

ответ

2

Попробуйте это :)

function createMenu($nav){ 
    echo "<ul>"; 
    foreach($nav as $key => $row){ 
     if(!is_array($row)){ 
      echo "<li>".$row."</li>"; 
     }else{ 
      echo "<li>".$key; 
       createMenu($row); 
      echo "</li>"; 

     } 
    } 
    echo "</ul>"; 
} 

createMenu($nav); 
1
$array = [ 
    'home', 
    'page 1' => [ 
     'page 1.1' => [ 
      'page 1.1.1', 
      'page 1.1.2' 
     ], 
     'page 1.2' 
    ], 
    'page 2' => [ 
     'page 2.1' 
    ] 
]; 

function buildLists($array) { 
    $result = ''; 
    foreach($array as $key => $value) { 
     if(!is_int($key)) { 
      $result .= '<li>' . $key; 
     } else if(!is_array($value)) { 
      $result .= '<li>' . $value; 
     } 
     if(is_array($value)) { 
      $result .= '<ul>'; 
      $result .= buildLists($value); 
      $result .= '</ul>'; 
     } else { 
      $result .= '</li>'; 
     } 
    } 
    return $result; 
} 

Использование:

<nav> 
    <ul> 
     <?= buildLists($array); ?> 
    </ul> 
</nav> 

выход:

<li>home</li> 
<li>page 1 
    <ul> 
     <li>page 1.1 
      <ul> 
       <li>page 1.1.1</li> 
       <li>page 1.1.2</li> 
      </ul> 
     </li> 
     <li>page 1.2</li> 
    </ul> 
</li> 
<li>page 2 
    <ul> 
     <li>page 2.1</li> 
    </ul> 
</li> 
1

Попробуйте

<?php 
$nav = array (
    "page 1" => array (
     "page 1.1" => array (
      "page 1.1.1", 
      "page 1.1.2" 
     ), 
     "page 1.2" 
    ), 
    "page 2" => array (
     "page 2.1" 
    ) 
); 

function drawRecursive($list){ 
    echo "<ul>"; 
    foreach ($list as $key=>$item){ 
     echo "<li>"; 
     if (is_array($item)){ 
      echo $key; 
      drawRecursive($item); 
     } else { 
      echo $item; 
     } 
     echo "</li>"; 
    } 
    echo "</ul>"; 
} 

echo "<nav>"; 
drawRecursive($nav); 
echo "</nav>"; 
?> 
Смежные вопросы