2009-11-28 10 views
7

Come vado da questo array multidimensionale:PHP Array nella Lista

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

a questo:

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

sopra è in html ...

+0

tante cose. Questo è il mio ultimo sospiro – Ash

risposta

12

Ecco un modo molto più gestibile per farlo che a risuonare 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> 

Ecco un altro modo con H2S per le città e le liste non annidate

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

il codice HTML isn outputted Sono nel formato più carino ma puoi aggiustarlo. È tutto sul fatto che tu voglia un codice piuttosto html o più facile da leggere. Sono tutto per leggere più facilmente codice =)

+0

questa è la risposta corretta. Perfezionare. Grazie per avermi fatto conoscere. questo è ESATTAMENTE quello che stavo cercando. – Ash

+0

@Ash si può notare che 'endforeach' è usato qui per il senso di leggibilità, quindi può essere usato il' foreach' ordinario. Vedi http://php.net/manual/en/control-structures.alternative-syntax.php –

0

supponga i dati sono in $ array.

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

Non ho provato, ma sono abbastanza sicuro che sia giusto.

+0

Questo non è esattamente ciò che è stato richiesto, ma probabilmente è ciò che è stato inteso. Alcuni CSS completeranno la formattazione. –

+0

in realtà il codice precedente fornisce solo un "figlio" per ciascun genitore, quindi ad esempio a Camden Town viene assegnato solo un hotel anziché 2. – Ash

+0

si consiglia di utilizzare eco su stampa in 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; 
} 

Penso che tu stia cercando questo.

+2

codice Rockstar proprio qui. Grazie per avermi salvato il tempo di costruirlo! – Beachhouse

+0

Mi piace che sia ricorsivo –

7

funciton di acmol refactoring

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