首页 > 解决方案 > php 从动态 td tr 创建表

问题描述

我试图从具有动态行单元格的动态数组创建一个表。

当在数组中找到行时,它将<tr>首先添加标签,直到row在数组中找到下一个。我想当行找到tr的标记将从td内部的标记开始,直到在数组中找到下一行,然后再次相同tr的标记将开始,直到在数组中找到下一行。

这是数组的示例

$cars = array (
      array(
          'table_body_element'=>'row',
          'cell_text'=>'',
      ),
      array(
          'table_body_element'=>'cell',
          'cell_text'=>'Column 1',
      ),
      array(
          'table_body_element'=>'cell',
          'cell_text'=>'Column 2',
      ),
      array(
          'table_body_element'=>'cell',
          'cell_text'=>'Column 3',
      ),
      array(
          'table_body_element'=>'row',
          'cell_text'=>'',
      ),
      array(
          'table_body_element'=>'cell',
          'cell_text'=>'Column 11',
      ),
      array(
          'table_body_element'=>'cell',
          'cell_text'=>'Column 22',
      ),
      array(
          'table_body_element'=>'row',
          'cell_text'=>'',
      ),
    );

我试图检查它是否是行标签并在其上添加 tr 标签。

这是我的 foreach 循环。

echo '<table><thead><tr>';
foreach ($cars as $item){
    echo '<td>'.$item[ 'cell_text' ].'</td>';
    if( $item[ 'table_body_element' ] == 'row' ){
        echo '</tr><tr>';
    }
}
echo '</tr></tbody></table>';

输出

在此处输入图像描述

现在的输出显示如下。使用没有 td 内容的快速空 tr div 和最后一个没有内容的 tr div 打印。我想删除这个唯一的内容 tr 标签,并且 td 需要在结果中打印。

标签: phphtml

解决方案


问题是你总是先输出单元格文本,即使是rows,当你得到一个新行时,你总是打开下一行......

echo '</tr><tr>';

至少你关闭它,但很难(不维护各种标志)决定何时输出开始标签。

或者,这会建立每一行,然后使用数组implode()在它们周围$rows添加<tr></tr>标签......

echo '<table><thead>';
$rows = [];
$row = '';
foreach ( $cars as $car )   {
    if ( $car['table_body_element'] == 'row' ) {
        if ( !empty($row) ) {
            $rows [] = $row;
            $row = '';
        }
    }
    else    {
        $row .= '<td>'.$car[ 'cell_text' ].'</td>';
    }
}
echo '<tr>'.implode( '</tr><tr>', $rows ).'</tr>';
echo '</tbody></table>';

推荐阅读