2012-10-28 5 views
2

Je construis une application qui tire des enregistrements à partir d'un MongoDB. Je l'ai construit la thead> tr> e comme suit:Sortie chaque enregistrement mongodb à une table html

// building table head with keys 
    $cursor = $collection->find(); 
    $array = iterator_to_array($cursor); 
    $keys = array(); 
    foreach ($array as $k => $v) { 
      foreach ($v as $a => $b) { 
        $keys[] = $a; 
      } 
    } 
    $keys = array_values(array_unique($keys)); 
    // assuming first key is MongoID so skipping it 
    foreach (array_slice($keys,1) as $key => $value) { 
     echo "<th>" . $value . "</th>"; 
    } 

Cela me donne:

<thead> 
    <tr> 
     <th>name</th> 
     <th>address</th> 
     <th>city</th> 
    </tr> 
</thead> 

Cela fonctionne très bien, il saisit toutes les clés et construit la tête de table. Je n'ai rien à spécifier et le thead est construit dynamiquement à partir des données. La partie que je ne parviens pas à comprendre est la construction de tous les tr> td de

Je peux facilement saisir l'information et de construire comme ceci:

$cursor = $collection->find(); 
$cursor_count = $cursor->count(); 
    foreach ($cursor as $venue) { 
     echo "<tr>"; 
     echo "<td>" . $venue['name'] . "</td>"; 
     echo "<td>" . $venue['address'] . "</td>"; 
     echo "<td>" . $venue['city'] . "</td>"; 
     echo "</tr>"; 
    } 

Cela me oblige à modifier mon php à chaque fois J'ajoute un nouveau champ. Comment puis-je construire le tr> td automagiquement basé sur les données de mongodb comme je suis avec le thead?

Mes données ressemble à ceci:

{ 
    "name": "Some Venue", 
    "address": "1234 Anywhere Dr.", 
    "city": "Some City" 
} 

Répondre

1

Avez-vous essayez d'utiliser la deuxième foreach comme ci-dessous

$cursor = $collection->find(); 
$cursor_count = $cursor->count(); 
    foreach ($cursor as $venue) { 
     echo "<tr>"; 
     foreach (array_slice($keys,1) as $key => $value) { 
      echo "<td>" . $venue[$value] . "</td>"; 
     } 
     echo "</tr>"; 
    } 
+0

Cela fonctionne, merci beaucoup :) – ccheney

+0

Ce ne sera pas valide HTML devrait les lignes ont des champs différents dans certains documents. Les noms de champs semblent également bizarres ici, surtout si la première ligne omet des champs d'autres lignes. Fondamentalement, cela va, dans la plupart des cas, créer une table malformée pour les lignes sans schémas. – Sammaye

Questions connexes