2012-12-26 1 views
6

Sto provando a stampare una tabella utilizzando PHP/HTML. Dati memorizzati all'interno di array come questo:Mostra array come tabella

Array ([id] => 1 [first_name] => mike [last_name] => lastname) 

Il mio codice è come segue. Funziona e non ci sono errori, tuttavia l'output non è come previsto. Ecco il codice/HTML PHP:

<table> 

<tr> 
    <th>1</th> 
    <th>2</th> 
    <th>3</th> 
</tr> 

<?php foreach ($res as $item): ?> 
<tr> 
    <td><?php echo $item['id'] ?></td> 
    <td><?php echo $item['first_name'] ?></td> 
    <td><?php echo $item['last_name'] ?></td> 
</tr> 
<?php endforeach; ?> 

</table> 

Il risultato che ottengo è il primo carattere delle voci:

1  2  3 
1  1  1 
m  m  m 
l  l  l 

Non so cosa sto facendo male? Gradirei davvero una spiegazione.

UPDATE:

codice PHP che non ha errori:

<?php 
    foreach ($result as $row) 
    { 
     echo '<tr>'; 
     echo '<td>' . $row['id'] . '</td>'; 
     echo '<td>' . $row['first_name'] . '</td>'; 
     echo '<td>' . $row['last_name'] . '</td>'; 
     echo '</tr>'; 
    } 
?> 

E questa è la mia matrice con una sola "riga" in esso:

uscita di $ risultare variabile utilizzando print_r ($ result) con < PRE> tag

Array 
(
    [id] => 3 
    [first_name] => Jim 
    [last_name] => Dude 
) 

Ecco il risultato I che ottiene:

effettivo risultato Tabella:

ID First Name Last Name 
3  3   3 
J  J   J 
D  D   D 

Tuttavia se ho 0 in array o più di 1 (che significa 2 o più) che funziona perfettamente. ESSO NON FUNZIONA QUANDO HO UNA SOLO "RIGA" DI ELEMENTI ALL'INTERNO DELL'ARRAY. Per esempio questo array, funziona perfettamente:

Array 
    (
    [0] => Array 
     (
      [id] => 3 
      [first_name] => Jim 
      [last_name] => Dude 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [first_name] => John 
      [last_name] => Dude2 
     ) 
    ) 

ottengo questo risultato:

ID  First Name Last Name 
3  Jim   Dude 
4  John   Dude2 

io non sono davvero sicuro di quello che sto facendo male. L'idea non è sapere quanti oggetti si trovano in una tabella e leggerla nella variabile $result e quindi usare questa variabile per stampare tutti gli elementi all'interno della tabella HTML. La tabella potrebbe contenere elementi O, 1 riga di elementi, 1 o più righe di elementi.

+0

N-livello array in una tabella ha risposto qui https://stackoverflow.com/questions/4746079/how-to-create-a-html-table-from-a-php-array/47015800# 47015800 – Delickate

+0

Questa discussione è stata risposta qui [Clicca qui] (https://stackoverflow.com/questions/4746079/how-to-create-a-html-table-from-a-php-array/47068295#47068295) – Delickate

risposta

2

È struttura di dati non è matrice, ma un array:

Array ([id] => 1 [first_name] => mike [last_name] => lastname)

Hai bisogno di qualcosa di simile a fare quello che vuoi:

Array(
    [0] => Array ([id] => 1 [first_name] => mike [last_name] => lastname), 
    [1] => Array ([id] => 1 [first_name] => mike [last_name] => lastname) 
    ........ 
); 

A parte questo, il codice sembra bene ..

+0

Ho rimosso foreach da lì e ora mostra correttamente gli oggetti. Non sono sicuro che se mi parli nel tuo caso, ho più "righe" come mi sposterò a quella successiva senza foreach? E cosa succede se il mio programma ha un array con una sola "riga"? –

+0

Bene, qui è un problema critico generare correttamente la struttura dei dati. È necessario rispondere alle seguenti domande: "Mi aspetto più file?", "Non mi aspetto nessuna riga?" o anche "Mi aspetto una singola riga ogni volta?". Nel caso in cui tu abbia più righe hai ** bisogno di un ciclo 'for' /' foreach'. Permettimi di essere più concreto qui e chiedi cosa stai cercando di costruire? –

2

Non rimuovere il ciclo di foreach. Senza vedere il codice dove si costruisce la matrice, la mia ipotesi sarebbe che si sta facendo questo:

$res = array('id' => 1, 'first_name'=>'mike', 'last_name'=>'lastname'); 

quando in realtà quello che probabilmente vuole fare è questo:

$res[] = array('id' => 1, 'first_name'=>'mike', 'last_name'=>'lastname'); 

le parentesi [] aggiungi un array di tutti i valori al tuo array.In questo modo è possibile eseguire il ciclo di ciascuna di esse come una raccolta di valori, non singoli valori.

0

Ecco come ho risolto un problema simile che avevo con la mia pagina web. Volevo che la pagina visualizzasse una serie di tutte le classi che un insegnante specifico insegna usando le variabili di sessione. Spero che, anche se l'argomento potrebbe non essere pertinente per te, l'essenza generale aiuterà le persone.

<?php 

    echo "<table border='1' style='border-collapse: 
    collapse;border-color: silver;'>"; 
    echo "<tr style='font-weight: bold;'>"; 
    echo "<td width='150' align='center'>Class</td>"; 
    echo "</tr>"; 

    foreach ($query_class_array as $row) 
    { 
     echo '<td width="150" align=center>' . $row['Class'] . '</td>'; 
     echo '</tr>'; 
    } 
?> 
1
<? Php 
echo "<table border="2">"; 

foreach($ array as $ values) 
{ 

echo "<tr><td>"; 

echo "$ values"; 

echo "</td></tr>"; 
} 

?> 

Ho scritto questo per la stampa di valori singoli di array in una tabella

-1

Se la matrice è di tipo oggetto std, non è possibile utilizzare [], utilizzare invece -> per ottenere entità specifiche

<!DOCTYPE html> 
<html> 
<body> 
<table> 

<tr> 
    <th>id</th> 
    <th>First name</th> 
    <th>Last name</th> 
    <th>email</th> 
    </tr> 

<?php 

foreach($data as $item) {?> 

<tr> 
    <td><?php echo $item->id; ?></td> 
    <td><?php echo $item->first_name; ?></td> 
    <td><?php echo $item->last_name ;?></td> 
    <td><?php echo $item->email;?></td> 

</tr> 

<?php }?> 

</table> 
</body> 
</html>