function fun_proc_rowspan($l_str)
{
$l_a = explode("\n", $l_str);
for($i=count($l_a)-1; $i>=0; $i--) {
$l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_str = eregi_replace(" $l_b = explode("", $l_str); //如有n个,则分成(n+1)个组,最开始一项为空.
for($j=0; $j 如 +----+----+----+----+----+----+----+
+----+----+----+----+----+----+----+此一行保存7格, 前6格都有rowspan=2
+-----------------------------+----+此一行只保存2格
+----------------------------------+此一行只保存1格
*/
$l_str = trim($l_b[$j]);
if(eregi("rowspan", $l_str)) {
$rowspan = preg_replace("/^ $rowcont = preg_replace("/^(.+)/", "\\1", $l_str);
$l_a = fun_add_row_td($l_a, $i, $j, $rowspan, $rowcont);
$l_str = implode("\n", $l_a);
return $l_str;
}
}//end of for j
}//end of for i
return $l_str;
}
function fun_add_row_td($l_a, $r, $l, $add_n, $add_cont) //l_a是数组, r是插入的开始行,l是开始的列, add_n是跨多少行, add_cont是加的内容
{
for($i=$r; $i if($i == $r) {
$l_str = eregi_replace(" $l_b = explode("", $l_str);
$l_c = "";
for($j=1; $j if($j == $l) $l_c .= eregi_replace("rowspan", "", $l_b[$j]); //去掉rowspan
else $l_c .= $l_b[$j];
}
$l_a[$i] = $l_c;
continue;
}
$l_str = eregi_replace("分隔符
$l_b = explode("", $l_str); //以分组
$l_c = "";
for($j=1; $j if($j == $l) {
$l_c .= "".$add_cont."";
}
$l_c .= $l_b[$j];
}//end of for j
$l_a[$i] = $l_c; //更新后的新内容
}//end of for i
return $l_a;
}
function fun_proc_colspan($l_str)
{
$l_a = explode("\n", $l_str);
for($i=0; $i $l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_str = eregi_replace(" $l_b = explode("", $l_str); //如有n个,则分成(n+1)个组,最开始一项为空.
for($j=1; $j $l_str = trim($l_b[$j]);
if(eregi(" $colspan = preg_replace("/^ $colcont = preg_replace("/^(.+)/", "\\1", $l_str);
$l_a = fun_add_col_td($l_a, $i, $j, $colspan, $colcont);
$l_str = implode("\n", $l_a);
return $l_str;
}
}//end of for j
}//end of for i
return $l_str;
}
function fun_add_col_td($l_a, $r, $l, $add_n, $add_cont) //l_a是数组, r是插入的开始行,l是开始的列, add_n是跨多少列, add_cont是加的内容
{
$l_str = eregi_replace("分隔符
$l_b = explode("", $l_str); //以分组
$l_c = "";
for($j=1; $j<=count($l_b); $j++) { //略过开始的空项,从1开始
if($j == $l) {
$l_c .= eregi_replace("colspan", "", $l_b[$j]); //去掉colspan
continue;
}
if($j == $l+1) {
for($k=0; $k $l_c .= "".$add_cont."";
}
$l_c .= $l_b[$j];
}//end of for j
$l_a[$r] = $l_c; //更新后的新内容
return $l_a;
}
$l_str = file_get_contents("test.htm"); //获取网页内容
$l_str = eregi_replace(".*$l_str = eregi_replace(".*", "", $l_str);
$l_str = eregi_replace("\r", "", $l_str); //去掉\r
$l_str = eregi_replace("\n", "", $l_str); //去掉\n
$l_str = eregi_replace("", "\n", $l_str); //使表格的一行成为一行数据
$l_str = strip_tags($l_str, ""); //只保留,HTML表记
while(eregi("while(eregi("/至此,表格处理已完成.
$l_str = eregi_replace("", "
", $l_str); //给每一格之间加上标记
$l_str = strip_tags($l_str, "
");
$l_a = explode("\n", $l_str);
for($i=0; $i $l_str = trim($l_a[$i]);
if(empty($l_str)) continue;
$l_b = explode("
", $l_str);
foreach($l_b as $val) {
echo $val." "; //表格每列内容间加空格
}
echo "
"; //表格的一行显示为一行
}
//附测试用例和测试结果:
/***********测试用表格*************************************************************
Untitled Document
1
2
3
4
5
6
7
a1
22
a2
a3
b1
b2
b3
b4
33
c1
c2
c3
c4
44
d1
d2
d3
d4
e1
e2
e3
e4
e5
f1
f2
f3
g1
g2
h1
i1
i2
i3
i4
i5
j1
j2
j3
j4
k1
k2
l1
l2
m1
m2
m3
*********************************************************************************/
/**************操作结果的表格***********************************************
1 2 3 4 5 6 7
a1 22 a2 a3 a3a3a3
b1 22b2 b2b3 b4 33
c1 22c2 c3 c4 44 33
d1 22d2 d3 d4 4433
e1 22e2 e3 e4 e5 33
f1 22f2 f3 f3f3f3
g1 22g2 g2g2g2g2
h1 h1h1h1h1h1h1
i1 i2 i2i2i3 i4 i5
j1 j2 j2j2j3 j4 j4
k1 k1k1k1k1k1k2
l1 l1l1l1l1l1l2
m1 m1m1m1m1m2 m3
******************************************************************/
测试用表:
1234567
a122a2a3
b1b2b3b433
c1c2c3c444
d1d2d3d4
e1e2e3e4e5
f1f2f3
g1g2
h1
i1i2i3i4i5
j1j2j3j4
k1k2
l1l2
m1m2m3
测试结果的表:
1234567
a122a2a3a3a3a3
b122b2b2b3b433
c122c2c3c44433
d122d2d3d44433
e122e2e3e4e533
f122f2f3f3f3f3
g122g2g2g2g2g2
h1h1h1h1h1h1h1
i1i2i2i2i3i4i5
j1j2j2j2j3j4j4
k1k1k1k1k1k1k2
l1l1l1l1l1l1l2
m1m1m1m1m1m2m3
本文原创发布php中文网,转载请注明出处,感谢您的尊重!