2014-12-04 2 views
0

Это мое первое сообщение о stackoverflow.Сортировка строки из .txt в таблице html

Я пытаюсь сделать небольшое веб-приложение для себя. Этот сайт будет для меня списком ссылок, где я могу размещать интересные ссылки, пока я нахожусь на своем рабочем месте.

У меня уже есть файл HTML с формой и таблицей. И у меня есть функция в php. Эта функция записывает ввод формы внутри файла .txt. И ввод показан в таблице.

Функция:

if(file_exists('links.txt')) { 
readfile('links.txt'); 
} 
else { 
print '<tr><td><p>Your list is empty.</p></td><td><p>---</p></td></tr>'; 
} 

Вторая функция:

//Get the user's comment. 
$url = $_POST['url']; 
$text = $_POST['text']; 
$kategorie = $_POST['kategorie']; 
//Append it to the comments file. 
$f = fopen('links.txt', 'a'); 
fwrite($f, "<tr><td><a target='_blank' href='$url'>$text</a></td><td>$kategorie</td></tr>"); 
fclose($f); 
header('location:index.php'); 

Моя проблема в том, что я не знаю, как я могу сортировать те Поста по своей категории. Я знаю, что в PHP вы можете сортировать массивы. Но я не знаю, как это реализовать в моей .txt «базе данных».

Может кто-нибудь помочь мне с некоторыми подсказками.

Извините за мой плохой английский, я из Германии.

Спасибо, Nerdkowski

Edit:
@Forien

По какой-то причине не работает для меня.

Вот мой function.php:

//Get the user's comment. 
$url = $_POST['url']; 
$text = $_POST['text']; 
$kategorie = $_POST['kategorie']; 
//Append it to the comments file. 
$f = fopen('links.txt', 'a'); 
fwrite($f, "<tr><td><a target='_blank' href='$url'>$text</a></td><td>$kategorie</td></tr>\n"); 
fclose($f); 
header('location:index.php'); 

$file = fopen('links.txt', 'a'); 
$fileArray = array(); 

// file to array and prepare for sorting 
while (($line = fgets($file)) !== false) { 
    $pat = '~<td>([^<]*)</td>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<td>{{TMP}}</td>'; 
     $line = $matches[1].preg_replace($pat,$rep,$line); 
    } 
    $fileArray[] = $line; 
} 

// do sorting 

// revert changes 
$fileArrayBack = array(); 
foreach ($fileArray as $line) { 
    $pat = '~^([^<]*)<tr>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<tr>'; 
     $line = preg_replace($pat,$rep,$line); 
     $line = str_replace('{{TMP}}',$matches[1],$line); 
    } 
    $fileArrayBack[] = $line; 
} 
$fileArray = $fileArrayBack; 
unset($fileArrayBack); 

// enjoy sorted table; 

Первая моя функция, которая сохраняет форму ввода в .txt, а затем ваша функция.

Edit:

Я судимый для сортировки $ fileArray, но по какой-то причине он не работает для меня.

Вот мой код:

//Get the user's comment. 
$url = $_POST['url']; 
$text = $_POST['text']; 
$kategorie = $_POST['kategorie']; 
//Append it to the comments file. 
$f = fopen('links.txt', 'a'); 
fwrite($f, "fwrite($f, "<tr><td><a target='_blank' href='$url'>$text</a></td><td>$kategorie</td></tr>\n");\n"); 
fclose($f); 
header('location:index.php'); 

$file = fopen('links.txt', 'a'); 
$fileArray = array(); 

// file to array and prepare for sorting 
while (($line = fgets($file)) !== false) { 
    $pat = '~<td>([^<]*)</td>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<td>{{TMP}}</td>'; 
     $line = $matches[1].preg_replace($pat,$rep,$line); 
    } 
    $fileArray[] = $line; 
} 

// do sorting 
$fileArray = array("$line"); 
sort($fileArray); 


// revert changes 
$fileArrayBack = array(); 
foreach ($fileArray as $line) { 
    $pat = '~^([^<]*)<tr>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<tr>'; 
     $line = preg_replace($pat,$rep,$line); 
     $line = str_replace('{{TMP}}',$matches[1],$line); 
    } 
    $fileArrayBack[] = $line; 
} 
$fileArray = $fileArrayBack; 
unset($fileArrayBack); 

// enjoy sorted table; 

Когда я ударил сохранить на моей форме появляется пустая страница.

+0

Является ли этот вопрос все еще активен? – Rizier123

+0

Нет, я решил весь проект с sql DB. – Nerdkowski

+0

Прохладный! (BTW: Вам не нужно просто принимать ответ, если он не сработал для вас, вам не обязательно его принимать! (Только принимайте ответы, как решила ваша проблема и помогла вам больше всего)) – Rizier123

ответ

0

Просто загрузите файл в массив.

<?php 
$file = file_get_contents('file.txt'); 
$fileArray = explode("\n",$file); 

альтернативно:

<?php 
$file = fopen('file.txt', 'r'); 
$fileArray = array(); 
while (($line = fgets($file)) !== false) { 
    $fileArray[] = $line; 
} 

и дает массив строк файла. После этого вам просто нужно сортировать массивы :)

EDIT:

Это действительно не хороший способ сделать это.Но должны работать, если $kategorie чистый текст (без HTML-тегов) и каждая строка начинается с <tr> HTML тегом:

<?php 
$file = fopen('file.txt', 'r'); 
$fileArray = array(); 

// file to array and prepare for sorting 
while (($line = fgets($file)) !== false) { 
    $pat = '~<td>([^<]*)</td>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<td>{{TMP}}</td>'; 
     $line = $matches[1].preg_replace($pat,$rep,$line); 
    } 
    $fileArray[] = $line; 
} 

// do sorting on $fileArray alphabetically as categories are at beggining of elements 

// revert changes 
$fileArrayBack = array(); 
foreach ($fileArray as $line) { 
    $pat = '~^([^<]*)<tr>~Ui'; 
    if (preg_match($pat,$line,$matches)) { 
     $rep = '<tr>'; 
     $line = preg_replace($pat,$rep,$line); 
     $line = str_replace('{{TMP}}',$matches[1],$line); 
    } 
    $fileArrayBack[] = $line; 
} 
$fileArray = $fileArrayBack; 
unset($fileArrayBack); 

// enjoy sorted $fileArray table; to get back to string use $string = implode("\n",$fileArray); 
+0

Хорошо, круто. Спасибо, Forien. Я могу сортировать что-то в алфавитном порядке, но можно ли что-то сортировать по категории? – Nerdkowski

+0

Мой .txt результат выглядит следующим образом: URL TEXT КАТЕГОРИЯ URL TEXT КАТЕГОРИЯ То, что я хочу сказать: Можно ли сортировать все это entrys по своей категории ? – Nerdkowski

+0

Было бы проще, если бы вы использовали базу данных XML или MySQL. Или, если позже вы будете использовать файл csv для данных и добавленные теги html. Но если '$ kategorie' - чистый текст (без html-тегов), то проверьте мой отредактированный ответ. ** Должно ли ** работать – Forien

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