PHP 和 Smarty 循环表格

本文介绍使用Smarty模板引擎及PHP生成复杂表格的方法。通过循环和条件判断实现动态表格布局,适用于展示多层级数据结构。文章详细解释了如何根据不同数据类型调整表格样式,并保持良好的阅读体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Smarty:

<{assign var="j" value="0"}> <{assign var="i" value="0"}> <{assign var="a" value="0"}>
<table class="table_wrp" border="0" align="center" cellspacing="1" cellpadding="0" width="98%" bgcolor="#e7e7eb">
  <{foreach from=$info key=key item=inf}>
    <{if is_array($inf)}>
    <{assign var="k" value=""}>
    <{foreach from=$inf key=key1 item=inf1}>
        <{if $key eq 'base'}>
          <{if ($j mod 2) eq 0}><tr><{/if}>
          <td width="20%"><{$key1}></td>
          <td width="30%"><{$inf1}></td>
          <{if ($j mod 2) eq 1}></tr><{/if}>
          <{$j = $j + 1}>
        <{else}>
          <{if $k eq '' && i != 0}>
            </td>
            <{if ($j mod 2) eq 0}></tr><{/if}>
          <{/if}>
          <{if $k neq $key}>
            <{if ($j mod 2) eq 0}><tr><{/if}>
            <td width="20%"><{$key}></td>
            <td width="30%"><p><{$inf1}></p>
            <{$i = $i + 1}>
            <{$j = $j + 1}>
            <{$a = $a + 1}>
            <{$k = $key}>
          <{else}>
            <p><{$inf1}></p>
          <{/if}>
        <{/if}>

      <{/foreach}>

    <{else}>
      <{if $a lt 0}>
        </td>
        <{if ($j mod 2) eq 0}></tr><{/if}>
        <{$a = 0}><{$i = 0}>
      <{/if}>

      <{if ($j mod 2) eq 0}><tr><{/if}>
        <td width="20%"><{$key}></td>
        <td width="30%"><{$inf}></td>
      <{if $j mod 2 eq 1}></tr><{/if}>
      <{$j = $j + 1}>
  <{/if}>
  <{/foreach}>
</table>

PHP:

$html = '<table border="0" cellspacing="1" cellpadding="0" width="100%">
          <tr>
            <td width="15%" height="20">问卷名:</td>
            <td width="25%" align="left">'.$data['title'].'</td>
            <td width="20%" align="center" style="color:'.$terms_color.';font-size:14px;">'.$terms.'</td>
            <td width="20%" align="right">创建时间:</td>
            <td width="20%" align="left">'.date('Y-m-d H:i:s',$data['create_at']).'</td>
          </tr>
          <tr>
            <td colspan="5" height="1"><div style="border-bottom-style:dashed;"></div></td>
          </tr>
          <tr>
            <td height="50" align="center" colspan="5" style="font-size:20px;">详细信息</td>
          </tr>
          <tr>
            <td colspan="5">
              <table border="1" align="center" cellspacing="0" cellpadding="10" width="100%">';
            $j = 0; $i = 0; $a = 0;
            foreach($info as $key => $inf){
                  if(is_array($inf)){
                  $k = '';
                  foreach($inf as $key1 => $inf1){
                    if($key == 'base'){
                        if (($j % 2) == 0) $html .= '<tr>';
                        $html .= '<td width="20%">'.$key1.'</td>';
                        $html .= '<td width="30%">'.$inf1.'</td>';
                        if (($j % 2) == 1) $html .= '</tr>';
                        $j++;
                      }else{
                        if ($k == '' && $i != 0) {
                            $html .= '</td>';
                            if (($j % 2) == 0) $html .= '</tr>';
                        }
                        if ($k != $key) {
                            if (($j % 2) == 0) $html .= '<tr>';
                            $html .= '<td width="20%">' . $key . '</td>';
                            $html .= '<td width="30%"><p>' . $inf1 . '</p>';
                            $i++;
                            $j++;
                            $a++;
                            $k = $key;
                        }else{
                            $html .= '<p>'.$inf1.'</p>';
                        }
                      }
                    }
                  }else{
                    if ($a>0) {
                      $html .= '</td>';
                      if (($j % 2) == 0) $html .= '</tr>';
                      $a=0; $i=0;
                    }

                    if(($j % 2) == 0) $html .= '<tr>';
                    $html .= '<td width="20%">'.$key.'</td>';
                    $html .= '<td width="30%">'.$inf.'</td>';
                    if (($j % 2) == 1) $html .= '</tr>';
                    $j++;
                  }
                }
      $html .= '</table>';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值