解密一个功能

dav*_*ave 4 php html-table function

不久前,这个功能发布在一个问题的答案中.作为一个学习者,我有兴趣了解这个功能.但是,我不能让它按原样运作.海报没有说他已经测试了这个功能,所以它可能是一个"概念"的帖子,意在表明方向.OTOH,我可能没有正确地调用它.请帮忙,因为我花了一些时间试图理解它.

($ data数组是我刚刚用来运行该函数的数组.)

<?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;
    }

    ?>
Run Code Online (Sandbox Code Playgroud)

bdl*_*bdl 5

First off, your data is wrong. The function takes an array of arrays as an argument.

Note the line

  foreach (array_keys($data[0]) as $key) {
Run Code Online (Sandbox Code Playgroud)

......这个函数调用也是错误的; 它不应该采用第一个元素,它应该采用整个数组,因为它使用的是数组中的键.

试试这个:首先,将对array_keys的调用更改为使用整个数组,即

foreach(array_keys($data AS $key)
Run Code Online (Sandbox Code Playgroud)

然后改变你的输入和函数调用:

$data= array(
  'data1' => array('one','two','three'),
  'data2' => array('four','five','six'),
  'data3' => array('seven','eight','nine')  
);
echo render_table($data);
Run Code Online (Sandbox Code Playgroud)