2009-11-28 134 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>'; 
}