2009-11-28 4 views
7

Как перейти из этого многомерного массива:PHP массив в список

Array (
    [Camden Town] => Array (
    [0] => La Dominican 
    [1] => A Lounge 
), 
    [Coastal] => Array (
    [0] => Royal Hotel 
), 
    [Como] => Array (
    [0] => Casa Producto 
    [1] => Casa Wow 
), 
    [Florence] => Array (
    [0] => Florenciana Hotel 
) 
) 

к этому:

<ul> 
    <li>Camden Town</li> 
    <ul> 
    <li>La Dominican</li> 
    <li>A Lounge</li> 
    </ul> 
    <li>Coastal</li> 
    <ul> 
    <li>Royal Hotel</li> 
    </ul> 
    ... 
</ul> 

выше в HTML ...

+0

так много вещей. Это мой последний вздох – Ash

ответ

12

Вот гораздо более ремонтопригодны способ сделать это, чем эхо HTML ...

<ul> 
    <?php foreach($array as $city => $hotels): ?> 
    <li><?= $city ?> 
     <ul> 
      <?php foreach($hotels as $hotel): ?> 
      <li><?= $hotel ?></li> 
      <?php endforeach; ?> 
     </ul> 
    </li> 
    <?php endforeach; ?> 
</ul> 

Вот еще один способ использования H2S для городов, а не вложенные списки

<?php foreach($array as $city => $hotels): ?> 
<h2><?= $city ?></h2> 
    <ul> 
     <?php foreach($hotels as $hotel): ?> 
     <li><?= $hotel ?></li> 
     <?php endforeach; ?> 
    </ul> 
<?php endforeach; ?> 

Выведенный HTML ISN 't в самом хорошем формате, но вы можете это исправить. Это все о том, хотите ли вы довольно html или проще читать код. Мне все проще читать код =)

+0

это правильный ответ. Отлично. Спасибо, что познакомил меня с этим. это ТОЧНО, что я искал. – Ash

+0

@Ash вы можете заметить, что 'endforeach' используется здесь для понимания читаемости, поэтому можно использовать обычный' foreach'. См. Http://php.net/manual/en/control-structures.alternative-syntax.php –

0

Предположим, что ваши данные в $ массив.

echo '<ul>'; 
foreach ($array as $city => $hotels) 
{ 
    echo "<li>$city</li>\n<ul>\n"; 
    foreach ($hotels as $hotel) 
    { 
     echo " <li>$hotel</li>\n"; 
    } 
    echo "</ul>\n\n"; 
} 
echo '</ul>'; 

Не проверял его, но я уверен, что это правильно.

+0

Это не совсем то, что было запрошено, но это, вероятно, то, что было предназначено. Некоторые CSS завершат форматирование. –

+0

на самом деле приведенный выше код предоставляет только одного «ребенка» для каждого родителя, поэтому, например, Camden Town предоставляется только одна гостиница, а вместо 2. – Ash

+0

его рекомендуется использовать эхо-печать в PHP – jason

20
//code by acmol 
function array2ul($array) { 
    $out = "<ul>"; 
    foreach($array as $key => $elem){ 
     if(!is_array($elem)){ 
       $out .= "<li><span>$key:[$elem]</span></li>"; 
     } 
     else $out .= "<li><span>$key</span>".array2ul($elem)."</li>"; 
    } 
    $out .= "</ul>"; 
    return $out; 
} 

Я думаю, что вы ищите это.

+2

Код Rockstar прямо здесь. Спасибо, что спасли мне время его постройки! – Beachhouse

+0

Мне нравится, что это рекурсивный –

7

переработан acmol в Funciton

/** 
* Converts a multi-level array to UL list. 
*/ 
function array2ul($array) { 
    $output = '<ul>'; 
    foreach ($array as $key => $value) { 
    $function = is_array($value) ? __FUNCTION__ : 'htmlspecialchars'; 
    $output .= '<li><b>' . $key . ':</b> <i>' . $function($value) . '</i></li>'; 
    } 
    return $output . '</ul>'; 
}