编程语言
首页 > 编程语言> > php-在偶数行中具有偶数个单元格元素的HTML表(colspan)

php-在偶数行中具有偶数个单元格元素的HTML表(colspan)

作者:互联网

我试图建立一个非常简单的建筑物图表或流程图表示.

$floors = array(     array( 'app_1','app_2','app_2_A' ),
                            array( 'app_3','app_4','app_5'),
                            array( 'app_6','app_7', 'app_8','app_9') ,
                            array( 'app_10','app_11', 'app_12','app_13') ,
                            array( 'app_14','app_15', 'app_16') ,
                ); 

echo "<table border='2'>";

foreach ($floors as $floor ) {

    $total_app = count( $floor);

    echo "<tr>";

     for($i = 0;$i < $total_app; $i++){
      echo "<td colspan=" .$total_app.  ">";
          echo $floor[$i] . ' ( ' . $total_app . ' ) '; //brackets only for debug
           echo "</td>";
     }

    echo  "</tr>";

}   


echo "</table>";

结果是:

问题是:客户希望所有行的宽度相等,并且并非所有楼层都具有相同数量的公寓.

所以我想我会用’colspan’. (在代码echo“< td colspan =”.$total_app.“>”;)中

问题(2):该脚本需要在100栋不同的建筑物上工作,因此,对于“ colspan”而言,任何小于完整动态计算的工作都将不起作用.

据我了解,Colspan实际上是相对于我拥有的最大单元数(具有最大元素数的行).

如果这是真的,那么我需要知道哪个数组元素(floor)具有最高的计数(公寓)-然后将其设置为标头-但我不确定该怎么做.

所以

>如何计算嵌套数组中的元素并进行比较以查看“人口最多的楼层”
>完成该操作-如何计算与该最高数量相关的每层公寓排的colspan. (colspan只能有int(),而不能有分数或百分数)
>建筑物被认为是从下到上,从上到下都是桌子,所以我需要翻转数组,但要保留“ colspan”的计算
>最后但并非最不重要的一点-我可能看错了一切,可能有一种更简单的方法来达到想要的结果(也许是divs?)-但我现在看不到一个-如果存在,请“拍一拍”我,给我看看路..

编辑我

就像之前说过的:解决方案必须灵活适用于所有配置:
范例:

$floors = array(     array( 'app_1','app_2','app_2_A','app_2_B','app_2_C', 'app_2_D'),
                                array( 'app_3','app_4','app_5'),
                                array( 'app_6','app_7') ,
                                array( 'app_10','app_11', 'app_12','app_13') ,
                                array( 'app_14') ,
                    ); 

因此,任何“硬编码” colspan计算的尝试都将失败.
我需要行(楼层)的宽度相等,并且要使单元格(公寓)的每一行都填满,例如,如果我有2套公寓,则每行的宽度为50%(如果我有) 4套公寓,每套将占25%,3套公寓-33%,依此类推.

问题是如何在可能的情况下使用colspan或任何其他方法来实现这一目标.

解决方法:

首先,colspan是该行的立场,具有3列,但是我希望该行将所有列合并在单个单元格中,您可以使用colspan.

<?
$max_app = 0;
foreach( $floors as $floor ){
    $max_app = max(count($floor), $max_app);
}

echo "<table border='2'>";
foreach( $floors as $floor ){
    echo "<tr>";
    for( $a=0;$a<count($floor);$a++ ){
        if( $a+1 == count($floor) && $a+1 < $max_app ){
            //last cell, total number of cell in floor does not equals to $max_app
            echo "<td colspan='" . ($max_app - $a) . "'>";
        }else{
            echo "<td>";
        }
        echo $floor[$a];
        echo "</td>";
    }
    echo "</tr>";
}
echo "</table>";
?>

另一种解决方案是将DIV与float:left;一起使用.但是DIV的宽度需要知道.引起您的要求:所有单元都需要使用相同的宽度.

编辑1

您是否想要一个解决方案,使所有行的宽度相同,并且每行的所有单元格宽度相同???

<?
echo "<table border='0'>";
foreach( $floors as $floor ){
    echo "<tr><td><table border='1' width='100%'><tr>";
    $percent = ceil( 100 / count($floor) );
    foreach($floor as $app){
        print("<td width='{$percent}%'>{$app}</td>");
    }
    echo "</tr></table></td></tr>";
}
echo "</table>";
?>

标签:html-table,html,php
来源: https://codeday.me/bug/20191122/2059749.html