从文本文件中获取数据并将其显示在html表中

时间:2015-04-26 19:00:57

标签: php html file html-table

我在每个行的模式中都有一个文本文件:

Username : Score

我试图创建一个记分牌。

这是我的尝试:



<table width="200" border="1">
  <tr>
    <td width="85">Nom</td>
    <td width="99">Score</td>
  </tr>
  <tr>
    <td height="119"></td>
    <td></td>
  </tr>
</table>
&#13;
&#13;
&#13;

问题是我如何将每个usernamescore复制到表格中(没有:字符)?

修改

我目前的PHP代码:

<?php 

    $file = file_get_contents('facile.txt', true);
    $arr = explode("/", $file, 2);
    $first = $arr[0];

?>

这只会给我第一个用户名,但我想从每一行获取所有用户名。

3 个答案:

答案 0 :(得分:3)

这应该适合你:

这里我首先将所有行都放入一个带file()的数组中,其中每一行都是一个数组元素。在那里,我忽略每行末尾的空行和换行符。

在此之后,我使用array_map()遍历每一行并使用explode()提取用户名+得分,然后我将其作为数组返回以创建多维数组,例如:

Array
(
    [0] => Array
        (
            [username] => a
            [score] => 5
        )
    //...

我按照usort()的分数对数组进行排序(要将订单从ASC更改为DESC,您只需将>更改为< usort())之后,我只需遍历数据并将其打印在表格中。

<?php 

    $lines = file("scores.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $data = array_map(function($v){
        list($username, $score) = explode(":", $v);
        return ["username" => $username, "score" => $score];
    }, $lines);

    usort($data, function($a, $b){
        if($a["score"] == $b["score"])
            return 0;
        return $a["score"] > $b["score"] ? 1 : -1;
    });

?>

<table width="200" border="1">
    <tr>
        <td width="85">Nom</td>
        <td width="99">Score</td>
    </tr>
<?php foreach($data as $user){ ?>
    <tr>
        <td height="119"><?php echo $user["username"]; ?></td>
        <td><?php echo $user["score"]; ?></td>
    </tr>
<?php } ?>
</table>

输出:

Nom   Score  // Nom   Score
 e      2    //  d     123
 a      5    //  c     26
 b     15    //  b     15
 c     26    //  a      5
 d    123    //  e      2

答案 1 :(得分:2)

示例文本文件数据

user1 : 100
user2 : 80
user3 : 60
user4 user4 : 75

PHP代码

<table width="200" border="1">
    <tr>
        <td width="85">Nom</td>
        <td width="99">Score</td>
    </tr>
<?php
$file_handle = fopen("sample.txt", "rb");

while (!feof($file_handle) ) {
    $line_of_text = fgets($file_handle);
    $parts = explode(':', $line_of_text);
    echo "<tr><td height='119'>$parts[0]</td><td>$parts[1]</td></tr>";
}
fclose($file_handle);
?>
</table>

Result

要解决您在“:”之间分隔文本的问题,您可以使用爆炸功能。爆炸功能需要两个参数。第一个是要分离的字符(分隔符),第二个是要分隔的字符串。像你这样的例子是文本文件。您必须逐行阅读文本文件。所以你可以使用fgets()函数并爆炸该行。希望这会帮助你理解。

答案 2 :(得分:2)

Rizier123's answer很完美。但是我必须进行一些更改才能使其在我的系统中正常工作。

<!DOCTYPE HTML>
<html>
<body>
<?php

    $lines = file("scores.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    function explodeLine($v)
    {
        list($username, $score) = explode(":", $v);
        return array("username" => $username, "score" => $score);
    }
    $data = array_map('explodeLine', $lines);

    function comparatorFunc($a, $b)
    {
        if($a["score"] == $b["score"])
            return 0;
        return $a["score"] > $b["score"] ? 1 : -1;
    }
    usort($data, 'comparatorFunc');

?>

<table width="200" border="1">
    <tr>
        <td width="85">Nom</td>
        <td width="99">Score</td>
    </tr>
<?php foreach($data as $user){ ?>
    <tr>
        <td height="119"><?php echo $user["username"]; ?></td>
        <td><?php echo $user["score"]; ?></td>
    </tr>
<?php } ?>
</table>
</body>
</html>