【问题标题】:how to create html table in php如何在php中创建html表
【发布时间】:2010-12-14 07:07:45
【问题描述】:

我有以下基本使用explode 来拆分这些值的sn-p 代码:

<?php
$data=array();
$Inputfile = file("prod.txt");
foreach ($Inputfile as $line){
   $pieces = explode(";", $line);
   echo $pieces[0];
   echo $pieces[1];
   echo $pieces[2];
   echo $pieces[3];
//print_r($line);
}
?>

数据:(prod.txt)

PREFIX=abc;PART=null;FILE=/myprojects/school/out/data/feed_abc_2010120810.gz2
PREFIX=efg;PART=sdsu;FILE=mail_efg.dat.2010120810.gz2

有人可以告诉我如何动态地将它放入 HTML 表格中,像这样吗?是否有捷径可寻?谢谢。

PREFIX  PART   FILE
abc     null   /myprojects/school/out/data/feed_abc_2010120810.gz2
efg     sdsu   mail_efg.dat.2010120810.gz2

【问题讨论】:

    标签: php html html-table


    【解决方案1】:

    干净的方式

    <?php
    $inputfile = file("prod.txt");
    
    $data_lines = array();
    foreach ($inputfile as $line)
    {
        $data_lines[] = explode(";", $line);
    }
    
    //Get column headers.
    $first_line = array();
    foreach ($data_lines[0] as $dl)
    {
        $first_line[] = explode("=", $dl);
    }
    $headers = array();
    foreach ($first_line as $fl)
    {
        $headers[] = $fl[0];
    }
    
    // Get row content.
    $data_cells = array();
    for ($i = 0; $i < count($data_lines); $i++)
    {
        $data_cell = array();
        for ($j = 0; $j < count($headers); $j++)
        {
            $data_cell[$j] = substr($data_lines[$i][$j], strpos($data_lines[$i][$j], "=")+1);
        }
        $data_cells[$i] = $data_cell;
        unset($data_cell);
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>HTML Table With PHP</title>
        </head>
        <body>
            <table border="1">
                <tr>
                <?php foreach ($headers as $header): ?>
                    <th><?php echo $header; ?></th>
                <?php endforeach; ?>
                </tr>
            <?php foreach ($data_cells as $data_cell): ?>
                <tr>
                <?php for ($k = 0; $k < count($headers); $k++): ?>
                    <td><?php echo $data_cell[$k]; ?></td>
                <?php endfor; ?>
                </tr>
            <?php endforeach; ?>
            </table>
        </body>
    </html>
    

    【讨论】:

    • @cjd143SD,它现在应该可以正常工作了。它考虑了“PREFIX=”等的存在,并且应该适用于任意数量的行和列。
    【解决方案2】:

    这应该足够灵活,不需要任何硬编码的对名称:

    <?php
    
    $lines = preg_split('~\s*[\r\n]+\s*~', file_get_contents('prod.txt'));
    
    foreach($lines as $i => $line) {
        $pairs = explode(';', $line);
        foreach($pairs as $pair) {
            list($column, $value) = explode('=', $pair, 2);
            $columns[$column] = true;
            $rows[$i][$column] = $value;
        }
    }
    
    $columns = array_keys($columns);
    
    
    echo '<table><thead><tr>';
    
    foreach($columns as $column) {
        echo '<th>'.$column.'</th>';
    }
    
    echo '</tr></thead><tbody>';
    
    foreach($rows as $row) {
        echo '<tr>';
        foreach($columns as $column) {
            echo '<td>'.$row[$column].'</td>';
        }
        echo '</tr>';
    }
    echo '</tbody></table>';
    
    ?>
    

    【讨论】:

    • 谢谢。效果很好。使用 preg_split 的好例子。对我来说是新的。 ;-)
    • 没问题。 file() 也可以处理空行,但使用此方法还有修剪空白的额外好处。
    【解决方案3】:
    echo '<table><tr><td>PREFIX</td><td>Part</td>File</td></tr>';
    foreach ($Inputfile as $line){
       $pieces = explode(";", $line);
       $count=count($pieces);
    
       echo '<tr>';
       for ($counter=0; $counter <$count; $counter++)
       {
         echo '<td>'.$pieces[$counter].'<td>';
       } 
      echo '</tr>';
    }
    

    【讨论】:

      【解决方案4】:

      不是最漂亮的解决方案,只是一个例子:

      echo '<table><tr><td>PREFIX</td><td>PART</td><td>FILE</td></tr>';
      foreach ($Inputfile as $line)
      {
          $pieces = explode(';', $line);
          echo sprintf(
              '<tr><td>%s</td><td>%s</td><td>%s</td></tr>',
              ltrim($pieces[0], 'PREFIX='),
              ltrim($pieces[1], 'PART='),
              ltrim($pieces[2], 'FILE=')
          );
      }
      echo '</table>';
      

      【讨论】:

        【解决方案5】:

        这里确实有两个问题:

        1) 将每一行中的信息解析成一个记录/关联数组

        2) 将这些记录/数组的系列表示为 HTML 表格。

        好的代码会在一定程度上区分这些问题。

        function line2record($line) {
           $recordAA = array();
           $keyValuePairs = explode(';',$line);
           foreach($keyValuePairs as $kvp) {
               $pieces = explode('=',$kvp);
               $recordAA[$pieces[0]] = $pieces[1];
           }
           return $recordAA;
        }
        
        function record2TR($recordAA) {
           $str = implode('</td><td>',$recordAA);
           return "<tr><td>$str</td></tr>";
        }
        

        之后,几乎就是将这两个函数应用于文件的每一行:

        $Inputfile = file("prod.txt");
        foreach ($Inputfile as $line)
            echo record2TR(line2record($line));
        

        要获取标题行和表格/打开关闭标记,您可以执行以下操作:

        function record2TH($recordAA) {
            $headers = array_keys($recordAA);
            $str = implode('</th><th>',$headers);
            return "<tr><th>$str</th></tr>";
        }
        

        然后:

        $fp = fopen('prod.txt','r');
        $line = fgets($fp,MAX_LINE_LENGTH);  // you'd set this constant
        $firstRecord = line2record($line);
        echo "<table>";
        echo record2TH($firstRecord);
        echo record2TR($firstRecord);
        while($line = fgets($fp,MAX_LINE_LENGTH))
            echo record2TR(line2record($line));
        echo "</table>";
        

        【讨论】:

          猜你喜欢
          • 2017-10-05
          • 1970-01-01
          • 2011-06-12
          • 2015-06-16
          • 2014-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多