在文本文件中逐行排序和删除重复项

时间:2016-03-01 15:44:38

标签: php arrays file sorting duplicates

所以我有这个我要排序的文本文件。文本文件的内容如下所示: 当我在

Gere是我用来写这个代码的代码:

$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));

3 个答案:

答案 0 :(得分: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);


?>

当然,如果你想要它们已经是唯一的,并且只是将上面的两个代码片段组合起来。

答案 1 :(得分:1)

将文件加载到数组中,删除重复项,然后排序:

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

根据文件结构的不同,您可以使用FILE_IGNORE_NEW_LINESFILE_SKIP_EMPTY_LINES中的一个或两个。

然后保存,如果您不使用FILE_IGNORE_NEW_LINES(如果是,则必须添加它们):

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

答案 2 :(得分:-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";
}