2017-02-16 5 views
2

У меня есть сценарий, который собирает данные из текстового файла и отображает его в таблице HTML. Это довольно простая кодировка. Но я хочу, чтобы таблица отображала результаты, отсортированные по столбцу .$parts[1].. Поскольку скрипт теперь, он отображает результат, отсортированный по столбцу .$parts[0]..Сортировка данных из текстового файла в таблице HTML

Я попытался заставить его работать с 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> 

Я признателен за любую помощь я могу получить :)

EDIT: Текстовый файл выглядит следующим образом:

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 строк.

+0

wath тип данных - $ data [0]? –

+0

Я обновил исходное сообщение с образцами данных из текстового файла. – AndreasC

+0

, тогда вы должны сначала взорваться, загрузить в массив отсортировать его, а затем сделать echo –

ответ

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> 
+0

Спасибо, но когда я запустил это, я получаю ошибку HTTP 500. Я не могу дать вам больше информации, так как меня сейчас нет дома. – AndreasC

+0

Проверка синтаксиса PHP: ошибка анализа: синтаксическая ошибка, неожиданный «=» в вашем коде в строке 9 index = count ($ data); – AndreasC

+0

Извините, я забыл добавить '$' в строке 9: 'index = count ($ data);', он должен быть '$ index = count ($ data);'. –

0

Вы можете использовать функцию usort и обеспечить свою собственную функцию сортировки, как это:

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

Но вы должны извлечь все элементы массива первого и сортировать их после того, что вы можете распечатать их.

0

Как я понимаю, вы создаете свою таблицу по строкам, поэтому вывод будет представлять собой таблицу, отсортированную по порядку строк текстового файла, тогда и только тогда, когда текстовый файл сортируется по .$parts[0]. таблица будет отсортирована.

Я не думаю, что существует какой-либо простой способ сортировки таблицы html после создания, поэтому вам, вероятно, следует отсортировать данные перед созданием таблицы.

Смежные вопросы