0

我想创建一个在必要时生成表的类。我想要的是调用如下方法:

$html = new HTML;
$html->createTbody(
  Array(
    'tr' => Array(
      'td' => Array(
        '1','2','3','4'
      )
    ), 
    'tr' => Array(
      'td' => Array(
        '5','6','7','8'
      )
    )
  )
);

在这里,我有以下方法:


<?php
Class HTML{

   [..]

  public function createTbody($params = Array()){
    $output = "\n\t".'<tbody>';  
    foreach($params['tr'] AS $tr){
      $output .= '<tr>';
      foreach($params['tr']['td'] AS $td){
        $output .= "\n\t\t".'<td>'.$td.'</td>';
      }
      $output .= '</tr>';
    }
    $output .= "\n\t".'</tbody>'."\n";
    echo($output);
  }
?>

这样做的问题是,只tr打印最后一个数组。print_r此外,当 i$params数组时,它显示5, 6, 7, 8.

现在我很困惑。我假设我必须使tr数组唯一或递归方法,但是如何?

我尝试像这样调用该方法:

$html->createTbody(
  Array(
    'num' => '2', 
    'tr1' => Array(
      'td' => Array(
        '1','2','3','4'
      )
    ), 
    'tr2' => Array(
      'td' => Array(
        '5','6','7','8'
      )
    )
  )
);

然后在for($i=0;$i<$params['num'];$i++)循环中使用相同的方法并调用tr and td数组,$params['tr'.$i]['td']但这并没有按应有的方式输出。当我打印那个数组时,它确实显示了完整的数组。

也许有人可以帮助我吗?

4

2 回答 2

1

像这样的东西

array(
    'tr' => array(
        array(1, 2, 3, 4), // first row
        array('foo', 'bar', 5, 6), //second row
        // ...
    ),
);

如果您需要与 分开tdth您可以使用以下内容:

array(
    'tr' => array(
        array('th' => array(1, 2, 3, 4), 'td' => array(5)), // first row
        array('td' => array('foo', 'bar', 5, 6, 7)), //second row
        // ...
    ),
);
于 2013-05-23T11:36:17.640 回答
0

您的问题是您一遍又一遍地定义相同的密钥,从而覆盖它们。我建议你根本不要使用钥匙。只需确保数组的第一级始终为 tr,第二级始终为 td。

同样,在打印出来时,您的内部 foreach 错误;您应该使用第一个 foreach 中的 tr 变量,并获取它的 td,而不是在 foreach tr 上获取所有 tr/td。

此外,您有一层太多的数组。你称之为 TR 的那个总是只包含 1 个项目。

这应该更适合:

$html = new HTML;
$html->createTbody(
    Array( // entire table
        Array( // tr
            '1','2','3','4' // td's
        ), 
        Array( // tr
            '5','6','7','8' // td's
        )
    )
);

这可能是您的输出代码:

<?php
Class HTML{

    [..]

    public function createTbody($params = Array()){
        $output = "\n\t".'<tbody>';  
        foreach($params AS $tr){
            $output .= '<tr>';
            foreach($tr AS $td){
                $output .= "\n\t\t".'<td>'.$td.'</td>';
            }
            $output .= '</tr>';
        }
        $output .= "\n\t".'</tbody>'."\n";
        echo($output);
    }
?>
于 2013-05-23T11:48:51.370 回答