从HTML表格中的文本文件中对数据进行排序

时间:2017-02-16 06:46:22

标签: php html sorting html-table text-files

我有一个脚本,它从文本文件中收集数据并将其显示在HTML表格中。这是非常简单的编码。但我想要做的是让表格显示按.$parts[1].列排序的结果。现在,脚本显示按.$parts[0].列排序的结果。

我试图让它与usort一起使用,但我放弃了。

这是我的代码:

<table class="heavyTable">
   <thead>
      <tr>
         <th>Name</th>
         <th>Date</th>
         <th>Length</th>
      </tr>
   </thead>
   <tbody>
     <?php
       $file_handle = fopen("bardate_domains.txt", "rb");

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

我感谢我能得到的任何帮助:)

编辑: 文本文件如下所示:

0086.se 2017-04-02
0102design.se 2017-03-03
0141.se 2017-04-21
0158.se 2017-03-27
016fotboll.se 2017-03-31
020716.se 2017-04-12
021webb.se 2017-04-23

总共有大约40,000行。

3 个答案:

答案 0 :(得分:0)

您可以使用usort功能并提供您自己的排序功能,如下所示:

function cmp($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}

但是你必须首先检索所有数组元素,然后对它们进行排序,然后才能打印出来。

答案 1 :(得分:0)

据我了解,您是逐行创建表,因此输出将是按文本文件行的顺序排序的表,当且仅当文本文件按{{1}排序时这就是表格的排序方式。

我认为一旦创建了html表,就不会有任何(简单)方法对它进行排序,所以你应该在创建表之前对数据进行排序。

答案 2 :(得分:0)

<?php
    $fileHandler = fopen("bardate_domains.txt", "rb");
    $data = [];

    while (!feof($fileHandler) ) {
        // read file row
        $row = fgets($fileHandler);

        $index = count($data);

        // explode array by space
        $data[$index] = explode(' ', $row);

        // explode data[$index][0] by '.', then insert into array in index 0 & 1
        array_splice($data[$index], 0, 1, explode('.', $data[$index][0]));
    }

    // sort array by array index 1
    usort($data, function ($prev, $next) {
        if ($prev[1] == $next[1]) {
            return 0;
        }

        return ($prev[1] < $next[1]) ? -1 : 1;
    });

    fclose($fileHandler);
?>

<table class="heavyTable">
    <thead>
        <tr>
            <th>Name</th>
            <th>Date</th>
            <th>Length</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($data as $item): ?>
            <tr>
                <td><?= $item[0] . '.' . $item[1] ?></td>
                <td><?= $item[2] ?></td>
                <td><?= $item[1] ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
  </table>