所以我有这个我要排序的文本文件。文本文件的内容如下所示: 当我在
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));
答案 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_LINES
和FILE_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";
}