2009-11-28 21 views
7

¿Cómo voy de esta matriz multidimensional:PHP matriz en 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 esto:

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

anterior es en html ...

+0

tantas cosas. Este es mi último aliento – Ash

Respuesta

12

Aquí está una manera mucho más fácil de mantener para hacerlo que hacerse eco de 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> 

Ésta es otra manera usando H2S para las ciudades y las listas no anidados

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

El ISN html emitida No está en el formato más bonito, pero puedes arreglarlo. Se trata de si quieres bastante html o más fácil de leer el código. Estoy todo para leer código más fácil =)

+0

esta es la respuesta correcta. Perfecto. Gracias por presentarme a endforeach. esto es EXACTAMENTE lo que he estado buscando. – Ash

+0

@Ash puede notar que 'endforeach' se usa aquí para la legibilidad, por lo que se puede usar el' foreach' común. Ver http://php.net/manual/es/control-structures.alternative-syntax.php –

0

Supongamos que sus datos están en $ formación.

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

No lo he probado, pero estoy bastante seguro de que es correcto.

+0

Esto no es exactamente lo que se solicitó, pero probablemente es lo que se pretendía. Algunos CSS completarán el formateo. –

+0

en realidad el código anterior solo proporciona un "hijo" para cada padre, por ejemplo, Camden Town solo tiene un hotel en la lista en lugar de 2. – Ash

+0

es recomendable utilizar el eco sobre impresión 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; 
} 

Creo que usted está buscando esto.

+2

código de Rockstar aquí. ¡Gracias por ahorrarme el tiempo de construirlo! – Beachhouse

+0

Me encanta que sea recursivo –

7

Funciton de acmol refactorizado

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