如何做一个HTML'向上'行跨度

时间:2014-04-30 19:51:59

标签: php html mysql html-table

问题在于:

我需要知道是否有办法在表单上的<th>元素上执行向上的rowpan。

我正在读取数据库中的一些行,我需要将它放在一个html表中。 我正在做类似的事情:

echo "<table>";
while($result = $resultSet->fetch())
{
    echo "<tr>";
        echo "<td>$result['Name']</td>";
        echo "<td>$result['Job']</td>";
    echo "</tr>";
}
ehco "</table>";

第一步很容易,直到我需要跨越&#39;两个相邻的单元格包含相同的值。

例如,如果有人有相同的名字,但有两份工作,我希望他们有类似的东西:

echo "<tr>";
    echo "<td rowspan='2'>$result['Name']</td>";
    echo "<td>$result['Job']</td>";
echo "</tr>";

但是我无法预测有多少人有工作(除了他们都至少有一个工作,而且他们都是有序的)。 MySQL表中记录的例子

名称/ ** /工作

保罗/ ** / Jobs1

西蒙/ ** / Jobs23

西蒙/ ** / Jobs45

罗杰/ ** / Jobs67

(所有西蒙的工作都落后于彼此&#39;,他们被分组。如果保罗有第二份工作,那将是表中的第二个记录&#39;推动&#39;西蒙斯工作下来。)

所以我需要更改第一个元素的rowspan值以适应该人拥有的工作量。

这就是为什么我需要知道是否可以进行向上跨度,因为我可以只显示它们的每一个并计算每个人拥有的工作量,并执行将表格单元向上合并的行数。< / p>

然后获取数据库中的每一行然后循环遍历它们并检查一个人必须完成的工作数量肯定会更容易。现在然后单元格显示它们然后跳过它们。等等。

由于

3 个答案:

答案 0 :(得分:1)

这种情况需要预处理。像这样:

$people = array();
while($result = $resultSet->fetch())
{
    if( !isset($people[$result['Name']])) $people[$result['Name']] = array();
    $people[$result['Name']][] = $result['Job'];
}

echo "<table>";
foreach($people as $name=>$jobs)
{
    echo "<tr>";
        echo "<td rowspan=\"".count($jobs)."\">".$name."</td>";
        echo "<td>".array_shift($jobs)."</td>";
    echo "</tr>";
    foreach( $jobs as $otherjob)
    {
        echo "<tr><td>".$otherjob."</td></tr>";
    }
}
echo "</table>";

完成!

答案 1 :(得分:0)

不是使用rowspan,而是在第二列中嵌套一个表,包含该人的所有作业。

echo "<tr>";
echo "<td>$result['Name']</td>";
echo "<td>";
echo "<table>"
foreach($jobs as $job): //$jobs holds the job values for the current name
  echo "<tr><td>";
  echo $job;
  echo "</td></tr>";
endforeach;
echo "</table>";
echo "</td>";
echo "</tr>";

注意:您需要预处理结果集以获取此方法的2D数组(请参阅Niet the Dark Absol的回答)。

答案 2 :(得分:0)

您正在寻找的内容并不存在于HTML中。但你可以这样做:

$currName =  $result['Name'];
echo "<tr>";
    if($currName==$prevName)
    {
      echo "<td>&nbsp;</td>";
    }
    else
    {
      echo "<td>$result['Name']</td>";
    }
    echo "<td>$result['Job']</td>";
echo "</tr>";
$prevName = $currName;