Php 在偶数行中包含ueven cells元素的HTML表(colspan)
我试图建立一个非常简单的图表或流程图表示的建筑物Php 在偶数行中包含ueven cells元素的HTML表(colspan),php,html,html-table,Php,Html,Html Table,我试图建立一个非常简单的图表或流程图表示的建筑物 $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( '
$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计算的尝试都将失败。。
我需要行(楼层)的宽度相等,并且单元格(公寓)填充每一行,以这样的方式填充,例如,如果我有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>";
?>
你想要这样的东西吗???试试这个
$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 '<div style="border:#000000 solid 2px; padding:2px;width:100%;" >';
foreach ($floors as $floor ) {
$total_app = count( $floor);
echo '<div style=" padding:2px;" > ';
for($i = 0;$i < $total_app; $i++){
echo '<div style="border:#0000cc solid 1px; float:left; padding:2px;width:100px;" >';
echo $floor[$i] . ' ( ' . $total_app . ' ) '; //brackets only for debug
echo '</div> ';
}
echo '</div> <br> <br> ';
}
echo '</div>';
$floors=array(数组('app_1'、'app_2'、'app_2_A'),
数组('app_3'、'app_4'、'app_5'),
数组('app_6'、'app_7'、'app_8'、'app_9'),
数组('app_10'、'app_11'、'app_12'、'app_13'),
数组('app_14'、'app_15'、'app_16'),
);
回声';
foreach($floor作为$floor){
$total_app=计数($floor);
回声';
对于($i=0;$i<$total_app;$i++){
回声';
echo$floor[$i].('.$total_app.');//括号仅用于调试
回声';
}
回音“
”;
}
回声';
替代解决方案:DIV
<style>
.floor{ width: 800px; border: 1px solid red; padding: 4px; margin: 6px 0px; }
.app{ width: 110px; float: left; padding: 2px; margin: 0px 4px; border: 1px solid blue; }
.spacer{clear: both; }
</style>
<?
foreach( $floors as $floor ){
echo "<div class='floor'>";
for( $a=0;$a<count($floor);$a++ )
echo "<div class='app'>{$floor[$a]}</div>";
echo "<div class='spacer'></div>";
echo "</div>";
}
?>
.地板{宽度:800px;边框:1px纯红;填充:4px;边距:6px 0px;}
.app{width:110px;float:left;padding:2px;margin:0px 4px;border:1px纯蓝色;}
.spacer{clear:两者;}
正如你在上面得到了正确的答案,但这里也有一个
$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','app_90') ,
array( 'app_10','app_11', 'app_12','app_13') ,
array( 'app_14','app_15', 'app_16') ,
);
$maxCol = 0;
foreach($floors as $f){
$curCnt = count($f);
if($maxCol < $curCnt) $maxCol = $curCnt;
}
echo "<table border='2'>";
foreach ($floors as $floor ) {
$total_app = count( $floor);
$colSpan = $maxCol%$total_app;
echo "<tr>";
for($i = 0;$i < $total_app; $i++){
echo "<td colspan=" .(($i==($total_app-1))?$colSpan+1:1). ">";
echo $floor[$i] . ' ( ' . $total_app . ' ) '; //brackets only for debug
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
$floors=array(数组('app_1'、'app_2'、'app_2_A'),
数组('app_3'、'app_4'、'app_5'),
数组('app_6'、'app_7'、'app_8'、'app_9'、'app_90'),
数组('app_10'、'app_11'、'app_12'、'app_13'),
数组('app_14'、'app_15'、'app_16'),
);
$maxCol=0;
foreach(楼层为$f){
$curCnt=计数($f);
如果($maxCol<$curCnt)$maxCol=$curCnt;
}
回声“;
foreach($floor作为$floor){
$total_app=计数($floor);
$colSpan=$maxCol%$total_应用程序;
回声“;
对于($i=0;$i<$total_app;$i++){
回声“;
echo$floor[$i].('.$total_app.');//括号仅用于调试
回声“;
}
回声“;
}
回声“;
1-并非所有单元格都需要具有相同的宽度-但所有行都需要相同的宽度。(楼层)。2-您的解决方案给出了未定义的索引错误,我可以修复,但是-它不适用于所有配置-请参阅我的编辑Ithx,并修改了代码,从屏幕截图中查看:这更好。。但我的目标是让单元格填满这一行,。因此,如果只有2个单元格,每个单元格将占总数的一半..查看我的“编辑1”部分,但布局不等于您的副本。是的!!这就是我需要的。而且效果很好!我缺少的是:`$percent=ceil(100/计数($floor));`。。完美的谢谢不,您在那里做的只是将表更改为divs,结果是一样的。。我需要的是,无论有多少个单元格,单元格都要填满整行的内容。是的,请看第二个例子中的@Allen Chak Edit。。问题是如何使用colspan
再次实现这一点,最初的问题是我需要行(楼层)的宽度相等,并需要单元格将其填满。因此,如果我有3个单元(装置),每个单元将是33%,如果我有两个单元,每个单元将是50%,如果我有4个单元,每个单元将是25%,依此类推。。。我想知道如何计算colspan
。@ObmerkKronen,请查看本节,仅使用DIV。PS,有一个很小的错误,一个像素将丢失,因为它不能真正除以列,如3,7,9等
<style>
.floor{ width: 800px; border: 1px solid red; padding: 4px; margin: 6px 0px; }
.app{ width: 110px; float: left; padding: 2px; margin: 0px 4px; border: 1px solid blue; }
.spacer{clear: both; }
</style>
<?
foreach( $floors as $floor ){
echo "<div class='floor'>";
for( $a=0;$a<count($floor);$a++ )
echo "<div class='app'>{$floor[$a]}</div>";
echo "<div class='spacer'></div>";
echo "</div>";
}
?>
<style>
.floor{ width: 810px; border: 1px solid red; padding: 4px; margin: 6px 0px; }
.app{ float: left; padding: 2px; margin: 0px 4px; border: 1px solid blue; }
.spacer{clear: both; }
</style>
<?
foreach( $floors as $floor ){
echo "<div class='floor'>";
// 14px = 2 x (app.border: 1 + app.padding: 2 + app.margin: 4)
// 800px = floor.width - ( 2 x (floor.border: 1 + floor.padding: 4) )
$percent = floor( 1 / count($floor) * 800) - 14;
for( $a=0;$a<count($floor);$a++ )
echo "<div class='app' style='width: {$percent}px'>{$floor[$a]}</div>";
echo "<div class='spacer'></div>";
echo "</div>";
}
?>
$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','app_90') ,
array( 'app_10','app_11', 'app_12','app_13') ,
array( 'app_14','app_15', 'app_16') ,
);
$maxCol = 0;
foreach($floors as $f){
$curCnt = count($f);
if($maxCol < $curCnt) $maxCol = $curCnt;
}
echo "<table border='2'>";
foreach ($floors as $floor ) {
$total_app = count( $floor);
$colSpan = $maxCol%$total_app;
echo "<tr>";
for($i = 0;$i < $total_app; $i++){
echo "<td colspan=" .(($i==($total_app-1))?$colSpan+1:1). ">";
echo $floor[$i] . ' ( ' . $total_app . ' ) '; //brackets only for debug
echo "</td>";
}
echo "</tr>";
}
echo "</table>";