2016-03-01 5 views
1

Итак, у меня есть этот текстовый файл, который я хотел сортировать. Содержимое текстового файла выглядит следующим образом: Я «\ г \ п» в конце каждой строки, когда я писал их вСортировка и удаление дубликатов строк за строкой в ​​текстовом файле

Гир код, который я использовал пишу это:

$name = $_POST['name']; 
$email = $_POST['email']; 

$fileName = "GuestBook.txt"; 

    $fh = fopen($fileName, "a"); 
    fwrite($fh, $name); 
    fwrite($fh, "----"); 
    fwrite($fh, $email . "\r\n"); 
    fclose($fh); 

Открытие TXT файл в блокноте это выглядит примерно так:

aaa----aaa 
ggg----ggg 
sss----sss 
www----www 
ttt----ttt 
ppp----ppp 
ggg----ggg 
zzz----zzz 
www----www 

Теперь я хочу, чтобы отобразить его сортируется с дубликатами удалены:

aaa----aaa 
ggg----ggg 
ppp----ppp 
sss----sss 
ttt----ttt 
www----www 
zzz----zzz 

Это то, что я сделал для их сортировки:

$fileName = "GuestBook.txt"; 

$data = file_get_contents($fileName); 
$split = explode("\n",$data); 

sort($split); 

$data = implode("\n",$split); 

file_put_contents($fileName, $data); 

Это то, что у меня есть для удаления дубликатов

$fileName = "GuestBook.txt"; 

$lines = file($fileName); 
$lines = array_unique($lines); 

file_put_contents($fileName, implode("\n",$lines)); 
+0

yep я сделал, я могу поместить мой сорт и удалить повторяющийся код ... – javaMan1995

+0

Это был бы капитал! – AbraCadaver

+0

Эти функции находятся в функции sort_book() и remove_dups() У меня есть кнопка, которая, когда я нажимаю, Я вызываю эту функцию и другой код, который читает функцию – javaMan1995

ответ

3

Чтобы получить выход сортируют и единственный из файла, который вы можете сделать что-то вроде этого:

Первое чтение файла в массив с file(), поэтому у вас есть каждая строка как один элемент массива. Затем вы можете использовать array_unique(), чтобы у вас были только уникальные линии/элементы.

После этого вы можете отсортировать массив с помощью usort() и применить strcasecmp в качестве обратного вызова.

Код:

<?php 

    $fileName = "GuestBook.txt"; 
    $lines = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
    $lines = array_unique($lines); 

    usort($lines, "strcasecmp"); 

    print_r($lines); 

?> 

Если вы хотите сохранить их уже уникальный вы можете сделать это следующим образом:

прочитать также файл в массив с file() и просто проверить с in_array(), если вы уже имеете значение в своем массиве. Если не добавить значение в файл с file_put_contents().

Код:

<?php 

    $name = $_POST['name']; 
    $email = $_POST['email']; 

    $fileName = "GuestBook.txt"; 

    $lines = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 

    if(!in_array($name . "----" . $email, $lines)){ 
     file_put_contents($fileName, $name . "----" . $email . "\r\n", FILE_APPEND); 
    } 

?> 

И если вы хотите добавить значение уже отсортированный в файл, вы можете сделать это следующим образом:

снова получить файл в массив, добавить значение в массив, отсортируйте его, и вы можете вернуть его обратно.

Код:

<?php 

    $name = $_POST['name']; 
    $email = $_POST['email']; 

    $fileName = "GuestBook.txt"; 

    $lines = file($fileName, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); 
    $lines[] = $name . "----" . $email; 

    usort($lines, "strcasecmp"); 

    file_put_contents($fileName, implode("\r\n", $lines), FILE_APPEND); 


?> 

И, конечно, если вы хотите, чтобы они уже уникальны и сортируют просто объединить два фрагмента кода сверху.

+0

Могу ли я просто использовать file_put_contents ($ fileName, $ lines), чтобы вернуть его в txt-файл? спасибо – javaMan1995

+0

@ javaMan1995 Зависит, если у вас есть все ваши данные в '$ lines', и у них есть новая строка в конце каждого значения, вы можете вернуть ее так:' file_put_contents ($ fileName, $ lines) '. Если они нуждаются в новой строке, просто «implode()» перед возвращением: 'file_put_contents ($ fileName, implode (« \ r \ n », $ lines)». И если вы просто хотите добавить одно значение в файла, вы должны установить флаг, например 'file_put_contents ($ fileName, $ name." ---- ". $ email." \ r \ n ", FILE_APPEND)' – Rizier123

-1
<?php 
$fh = fopen('file.txt', 'r'); 
$lines = array(); 
while ($line = fgets($fh)) { 
    $lines[] = $line; 
} 
$arr = array_unique($lines); 
foreach ($arr as $line) { 
    echo $line . "\r\n"; 
} 
1

загрузить файл в массив, удалить дубликаты и затем сортировать:

$lines = array_unique(file('/path/to/file.txt')); 
sort($lines); 

В зависимости от структуры файла вы можете использовать один или оба из FILE_IGNORE_NEW_LINES и FILE_SKIP_EMPTY_LINES.

Тогда, чтобы сохранить, если вы не используете FILE_IGNORE_NEW_LINES (если это так, вы должны добавить их):

file_put_contents('/path/to/file.txt', $lines); 
+0

это сработало. большое спасибо! однако, есть ли способ поместить их в исходный текстовый файл? Как я могу использовать file_put_contents ($ fileName, $ lines), чтобы вернуть обратно в мой txt-файл? спасибо – javaMan1995

+0

Да, то, что у вас есть, должно работать, а если нет, убедитесь, что сообщение об ошибках включено, у вас может быть проблема с разрешением или что-то еще. – AbraCadaver

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