2009-11-28 30 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另一種方式不是最漂亮的格式,但你可以解決這個問題。這完全取決於你想要漂亮的html還是更容易閱讀代碼。我更容易閱讀代碼=)

+0

這是正確的答案。完善。 感謝您向我介紹endforeach。這完全是我一直在尋找的東西。 – Ash

+0

@你可能會注意到,'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

實際上上面的代碼只爲每個家長提供一個「孩子」,所以例如卡姆登鎮只給出一個酒店列出而不是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的功能可按

/** 
* 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>'; 
}