2010-01-24 5 views
4

Il y a peu de temps, cette fonction était affichée dans une réponse à une question. En tant qu'apprenant, je suis intéressé à comprendre la fonction. Cependant, je ne peux pas le faire fonctionner tel quel. L'affiche ne disait pas qu'il avait testé la fonction, donc cela aurait pu être un message «conceptuel», destiné à montrer la direction. OTOH, je ne peux pas l'invoquer correctement. S'il vous plaît aidez-moi car j'ai passé du temps à essayer de le comprendre.Déchiffrer une fonction

(le tableau de données $ est celui que je viens de mettre pour exécuter la fonction.)

<?php 

    $data = array("a" => "January", "b" => "February", "c" => "March"); 

    render_table ($data) ; 
    echo $html ; 

    //=========================================== 

    function render_table($data) { 
     $html = '<table>'; 
     $tr = array(); 
     foreach (array_keys($data[0]) as $key) { 
     $tr[] = '<th>' . htmlspecialchars($key) . '</th>'; 
     } 
     $html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>'; 
     $tbody = array(); 
     foreach ($data as $row) { 
     $tr = array(); 
     foreach ($row as $value) { 
      $tr[] = '<td>' . htmlspecialchars($value) . '</td>'; 
     } 
     $tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>'; 
     } 
     $html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>'; 
     $html .= '</table>'; 
     return $html; 
    } 

    ?> 

Répondre

5

Tout d'abord, vos données sont erronées. La fonction prend un tableau de tableaux en argument.

Notez la ligne

foreach (array_keys($data[0]) as $key) { 

... cet appel de fonction est faux aussi bien; il ne devrait PAS prendre le premier élément, il devrait prendre le tableau entier, puisqu'il utilise les clés du tableau.

Essayez ceci: d'abord, changer l'appel à array_keys d'utiliser l'ensemble du réseau, à savoir

foreach(array_keys($data AS $key) 

puis changer votre entrée, et l'appel de fonction:

$data= array(
    'data1' => array('one','two','three'), 
    'data2' => array('four','five','six'), 
    'data3' => array('seven','eight','nine') 
); 
echo render_table($data); 
+0

Oui! Cela fait l'affaire. Je n'avais pas réalisé que la fonction était destinée à fonctionner sur des réseaux multi-dim. Donc, les erreurs étaient 1. comment j'ai essayé d'appeler la fonction; 2. J'ai fourni le type incorrect de tableau; et 3. la ligne: foreach (array_keys ($ data AS $ key) Merci beaucoup! – dave

2

Essayez de cette façon:

<?php 

$data = array("a" => "January", "b" => "February", "c" => "March"); 

$html = render_table ($data) ; 
echo $html ; 

//=========================================== 

function render_table($data) { 
    $html = '<table>'; 
    $tr = array(); 
    foreach (array_keys($data[0]) as $key) { 
    $tr[] = '<th>' . htmlspecialchars($key) . '</th>'; 
    } 
    $html .= "\n" . '<thead>' . "\n" . '<tr>' . "\n" . implode("\n", $tr) . '</tr>' . '</thead>'; 
    $tbody = array(); 
    foreach ($data as $row) { 
    $tr = array(); 
    foreach ($row as $value) { 
     $tr[] = '<td>' . htmlspecialchars($value) . '</td>'; 
    } 
    $tbody[] = '<tr>' . "\n" . implode("\n", $tr) . '</tr>'; 
    } 
    $html .= "\n" . '<tbody>' . "\n" . implode("\n", $tbody) . '</tbody>'; 
    $html .= '</table>'; 
    return $html; 
} 

?> 

Il crée essentiellement une vue de tableau des données $ .

+0

Merci pour votre réponse. Je reçois toujours des erreurs: Avertissement: array_keys() [function.array-keys]: le premier argument doit être un tableau dans E: \ Wamp \ www \ temp \ temp.php sur la ligne 22 Avertissement: non valide argument fourni pour foreach() dans E: \ Wamp \ www \ temp \ temp.php à la ligne 29 – dave

1

La fonction crée une table pour afficher les données qui lui sont transmises. Dans votre code, vous avez

... 
render_table ($data) ; 
echo $html ; 

Cependant, $html dans ce cas est vide. La variable créée dans la fonction render_table ne passe en dehors de la fonction, sauf si vous attribuez la valeur de retour de la fonction à une variable, comme ceci:

... 
$html = render_table ($data) ; 
echo $html ; 

Ensuite, il fait écho à la table HTML.

+0

Merci. Je crois que les réponses précédentes suggéraient également cela dans le cadre de sa réponse, mais je n'arrive toujours pas à le faire fonctionner. A-t-il quelque chose à voir avec le numérique vs assoc. tableau? – dave

Questions connexes