使用PHP,如何将文本文件与链接一起输出到表中

时间:2009-12-07 07:10:21

标签: php preg-replace text-files preg-match href

我有这个文本文件:

Dec 04 20:15 Naruto 123
Dec 04 17:42 Naruto 98
Dec 04 16:19 D Gray Man 001
Dec 04 16:05 Bleach 128
Dec 04 12:13 50 x 50 44

我需要将内容输出到一个表中,其中Date和Time位于其自己的列中,而Tile和Chapter则位于另一列中。

另外..我需要用必须以这种方式格式化的链接替换Title和Chapter:

<a href="/title/title chapter">title chapter</a>

为了澄清,文本文件中的标题是:

Naruto
Naruto
D Gray Man
Bleach
50 x 50

这些章节是以下数字:

123
98
001
128
44

2 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题(尚未测试代码):

$data = Explode ( "\n", File_Get_Contents ( 'yourfile' ) );

foreach ( $data as $key => $line )
{
    $tmp = Explode ( ' ', $line );
    $month = $tmp[0];
    $day = $tmp[1];
    $time = $tmp[2];
    $numOfEntries = Count ( $tmp );
    $chapter = $tmp[$numOfEntries - 1];

    $title = '';
    for ( $i = 3; $i < $numOfEntries - 1; $i++ )
        $title .= $tmp[$i] . ' ';

    $title = Trim ( $title );

    $link = '<a href="/' . $title . '/' . $title . ' ' . $chapter . '">' . $title . ' ' . $chapter . '</a>';
}

答案 1 :(得分:0)

  1. 读取文件并将每一行存储到一个数组中。
  2. 打开<table>代码
  3. 循环遍历数组并使用正则表达式提取日期/时间/标题/章节。​​
  4. 以下是正则表达式 - 您可能需要稍微修改它以满足您的需求:

    /^([a-zA-Z]{3}\s\d{2})\s(\d{2}:\d{2})\s(.+?)\s(\d+)\s*?$/
    //$1 contains date : "Dec 04"
    //$2 contains time : "20:15"
    //$3 contains the title : "Naruto"
    //$4 contains the chapter : "123"
    

    对于数组中的每个项目,请编写适当的<tr>&amp; <td>标记填充了提取的数据。

    更新:

    <?php
    $filedata = "Dec 04 20:15 Naruto 123
    Dec 04 17:42 Naruto 98
    Dec 04 16:19 D Gray Man 001
    Dec 04 16:05 Bleach 128
    Dec 04 12:13 50 x 50 44";
    
    $lines = explode("\n", $filedata);
    
    echo "<table border=\"1\">";
    
    foreach($lines as $line)
    {
        echo "<tr>";
        preg_match("/^([a-zA-Z]{3}\s\d{2}\s\d{2}:\d{2})\s(.+?)\s(\d+)\s*?$/", $line, $matches);
        echo "<td>$matches[1]</td>";
        echo "<td><a href=\"/$matches[2]/$matches[2] $matches[3]\">$matches[2] $matches[3]</a></td>";
        echo "</tr>";
    }
    echo "</table>"
    ?>