解密一个功能

时间:2010-01-24 19:03:46

标签: php function html-table

不久前,这个功能发布在一个问题的答案中。作为一个学习者,我有兴趣了解这个功能。但是,我不能让它按原样运作。海报没有说他已经测试了这个功能,所以它可能是一个“概念”的帖子,意在表明方向。 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;
    }

    ?>

3 个答案:

答案 0 :(得分:5)

首先,你的数据是错误的。该函数将数组数组作为参数。

注意这一行

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

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

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

foreach(array_keys($data AS $key)

然后更改您的输入和函数调用:

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

答案 1 :(得分:2)

尝试这种方式:

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

?>

它基本上创建了$ data的表视图。

答案 2 :(得分:1)

该函数创建一个表来查看传递给它的数据。在您的代码中,您有

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

但是,在这种情况下,$html为空。除非您将函数的返回值赋给变量,否则render_table函数中创建的变量不会传递到函数外部,如下所示:

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

然后它回应表格HTML。