2009-11-28 4 views
7

Comment puis-je de ce tableau multidimensionnel:PHP tableau à la liste

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 
) 
) 

à ceci:

<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> 

ci-dessus est en html ...

+0

tant de choses. Ceci est mon dernier souffle – Ash

Répondre

12

est ici une manière beaucoup plus maintenable pour le faire que faire écho à 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> 

Voici une autre façon en utilisant h2s pour les villes et les listes non imbriquées

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

L'ISN html fourni en sortie 't dans le plus joli format mais vous pouvez résoudre ce problème. Il s'agit de savoir si vous voulez du code html ou plus facile à lire. Je suis tout pour plus facile à lire le code =)

+0

c'est la bonne réponse. Parfait. Merci de m'avoir présenté à endforeach. C'est exactement ce que j'ai cherché. – Ash

+0

@Ash vous pouvez noter, que 'endforeach' est utilisé ici pour le sens de la lisibilité, de sorte que le' foreach' ordinaire peut être utilisé. Voir http://php.net/manual/en/control-structures.alternative-syntax.php –

0

On suppose que vos données sont en $ tableau.

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>'; 

N'a pas testé, mais je suis sûr que c'est juste.

+0

Ce n'est pas tout à fait ce qui a été demandé, mais c'est probablement ce qui était prévu. Certains CSS compléteront le formatage. –

+0

en fait le code ci-dessus ne fournit qu'un seul "enfant" pour chaque parent, donc par exemple Camden Town ne reçoit qu'un seul hôtel au lieu de 2. – Ash

+0

son recommandé d'utiliser echo over print en 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; 
} 

Je pense que vous êtes à la recherche de cela.

+2

Code Rockstar ici. Merci de m'avoir sauvé le temps de le construire! – Beachhouse

+0

J'aime que c'est récursif –

7

de funciton de refactorisé 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>'; 
} 
Questions connexes