您的位置:程序门 -> web 开发 -> php



根据一数组标识给td标号


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


根据一数组标识给td标号
发表于:2007-02-05 15:26:16 楼主
有这样一个表格
<table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
    <tr>
        <td> &nbsp; </td>
        <td> <table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
            <tr>
                <td> &nbsp; </td>
                <td> &nbsp; </td>
            </tr>
        </table> </td>
    </tr>
    <tr>
        <td> &nbsp; </td>
        <td> &nbsp; </td>
    </tr>
    <tr>
        <td> &nbsp; </td>
        <td> <table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
            <tr>
                <td> &nbsp; </td>
                <td> &nbsp; </td>
            </tr>
        </table> </td>
    </tr>
</table>
根据上表,生成了下面的数组,
$arr   =   array( ' <table> ', ' <tr> ', ' <td> ', ' </td> ', ' <td> ', ' <table> ', ' <tr> ', ' <td> ', ' </td> ', ' <td> ', ' </td> ', ' </tr> ', ' </table> ',
' </td> ', ' </tr> ', ' <tr> ', ' <td> ', ' </td> ', ' <td> ', ' </td> ', ' </tr> ', ' <tr> ', ' <td> ', ' </td> ', ' <td> ', ' </table> ', ' <tr> ', ' <td> '
, ' </td> ', ' <td> ', ' </td> ', ' </tr> ', ' </table> ', ' </td> ', ' </tr> ', ' </table> '),然后希望根据上面的数组给每个td标上号,生成下面的一个数组,
$ar   =   array();
$ar[]   =   array( '1 ', '1 ', '1 ');
$ar[]   =   array( '1 ', '1 ', '2 ', '2 ');
$ar[]   =   array( '1 ', '2 ', '1 ');
$ar[]   =   array( '1 ', '2 ', '2 ');
$ar[]   =   array( '1 ', '3 ', '1 ');
$ar[]   =   array( '1 ', '3 ', '2 ', '3 ');
$ar[]   =   array( '2 ', '1 ', '1 ');
$ar[]   =   array( '2 ', '1 ', '2 ');
$ar[]   =   array( '3 ', '1 ', '1 ');
$ar[]   =   array( '3 ', '1 ', '2 ');
其中,ar数组中,前三位分别表示表格号、行号、列号。第四位表示该单元格的嵌套表格号。弄了两天了,还是没成呀,
发表于:2007-02-05 19:09:521楼 得分:0
用正则表达式解析table,就像模板引擎一样
发表于:2007-02-08 10:00:162楼 得分:0
不晓得你想搞啥子
发表于:2007-02-08 11:40:183楼 得分:0
第一问
$text   = < < <   html
<table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
    <tr>
        <td>   </td>
        <td> <table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
            <tr>
                <td>   </td>
                <td>   </td>
            </tr>
        </table> </td>
    </tr>
    <tr>
        <td>   </td>
        <td>   </td>
    </tr>
    <tr>
        <td>   </td>
        <td> <table   width= "100% "   border= "1 "   cellspacing= "1 "   cellpadding= "1 ">
            <tr>
                <td>   </td>
                <td>   </td>
            </tr>
        </table> </td>
    </tr>
</table>
html;

preg_match_all( '/ <\/?\w+/ ',   $text,   $regs);
$arr   =   array_map(create_function( '$v ',   'return   $v. "> "; '),   $regs[0]);
print_r($arr);
发表于:2007-02-08 11:59:534楼 得分:0
第二问,大致如下:

$table   =   0;
$tr   =   0;
$td   =   0;
foreach($arr   as   $v)   {
    $tag   =   preg_replace( '/[ <\/]+(\w+)> / ',   '\\1 ',   $v);
    if($v[1]   ==   '/ '   &&   $tag   ==   'table ')   $$tag--;
    else   {
        if($tag   ==   'tr ')   $td   =   0;
        $$tag++;
        if($tag   ==   'td ')   $ar[]   =   array($table,   $tr,   $td);
    }
}
       
print_r($ar);


快速检索

最新资讯
热门点击