You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用rowspan/colspan制作N×M表格:单元格含两行且第二行分两列

实现N×M表格:每个单元格含两行且第二行分两列的方案

你需要的是每个视觉单元格分为上下两部分:上部分为整行内容(如图片),下部分拆分为左右两列(如编号和价格),以下是两种符合colspan/rowspan要求的实现方案,同时修正你代码中的语法问题:

方案一:单元格内嵌套表格(用colspan)

在每个外层表格的<td>里嵌套一个小型表格,通过colspan让第一行内容跨两列,第二行分两列展示内容,结构清晰且易维护。

修改Artikal.php的get_html方法:

public function get_html()
{
    $html = "<td>";
    // 嵌套表格实现单元格内的两行结构
    $html .= "<table width='100%' border='0' cellpadding='2' cellspacing='0'>";
    
    // 第一行:图片,跨两列
    $html .= "<tr>";
    $html .= "<td colspan='2' align='center'>";
    // 处理图片路径
    if (isset($this->sifra) && isset($this->naziv) && isset($this->cena) && isset($this->kolicina)) {
        $imgSrc = $this->kolicina > 0 
            ? "images/" . str_replace(" ", "-", $this->naziv) . ".jpg" 
            : "images/none.png";
    } else {
        $imgSrc = "images/none.jpg";
    }
    $html .= "<img src='{$imgSrc}' width='100'>";
    $html .= "</td>";
    $html .= "</tr>";
    
    // 第二行:分两列展示编号和价格
    $html .= "<tr>";
    $sifra = isset($this->sifra) ? $this->sifra : "X";
    $html .= "<td align='left'><span class='sifra'>{$sifra}</span></td>";
    
    $cena = isset($this->cena) ? "{$this->cena} DIN" : "X";
    $html .= "<td align='right'><span class='cena'>{$cena}</span></td>";
    $html .= "</tr>";
    
    $html .= "</table>";
    $html .= "</td>";
    return $html;
}

index.php的代码无需修改,保持原有的6行9列循环即可,外层表格会自动生成对应结构。

方案二:外层表格用colspan构建(无嵌套)

直接通过外层表格的colspan属性,将每个视觉单元格对应为两行:第一行的单元格跨2列放图片,第二行用两个单元格分别展示编号和价格。

修改index.php的代码:

if (isset($artikli)) {
    for ($i = 0; $i < 6; $i++) {
        // 视觉行第一行:放图片,每个单元格跨2列
        echo "<tr>";
        for ($j = 0; $j < 9; $j++) {
            $artikal = $artikli[$i * 9 + $j];
            echo "<td colspan='2' align='center' style='padding:2px;'>";
            // 处理图片路径
            if (isset($artikal->sifra) && isset($artikal->naziv) && isset($artikal->cena) && isset($artikal->kolicina)) {
                $imgSrc = $artikal->kolicina > 0 
                    ? "images/" . str_replace(" ", "-", $artikal->naziv) . ".jpg" 
                    : "images/none.png";
            } else {
                $imgSrc = "images/none.jpg";
            }
            echo "<img src='{$imgSrc}' width='100'>";
            echo "</td>";
        }
        echo "</tr>";
        
        // 视觉行第二行:分两列展示编号和价格
        echo "<tr>";
        for ($j = 0; $j < 9; $j++) {
            $artikal = $artikli[$i * 9 + $j];
            $sifra = isset($artikal->sifra) ? $artikal->sifra : "X";
            echo "<td align='left' style='padding:2px;'><span class='sifra'>{$sifra}</span></td>";
            
            $cena = isset($artikal->cena) ? "{$artikal->cena} DIN" : "X";
            echo "<td align='right' style='padding:2px;'><span class='cena'>{$cena}</span></td>";
        }
        echo "</tr>";
    }
}

这种方式无需修改Artikal.php,直接通过外层表格的结构实现需求,同样用到了colspan属性。

注意事项

你原代码中存在语法错误:str_replace(" ", "-", $this->naziv) . jpg\"缺少引号和连接符,正确写法应为str_replace(" ", "-", $this->naziv) . ".jpg\",上述方案已修正该问题。

内容的提问来源于stack exchange,提问作者IgorArnaut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:16:40