PHP以数字方式排序文本文件(.txt)

时间:2010-08-26 17:36:40

标签: php sorting text-files

感谢您抽出宝贵时间阅读本文,我将感谢每一个回复,无论内容的质量如何。 :)

使用php,我正在尝试创建一个脚本,该脚本将按升序(从最低到最高)对文本文件(.txt)进行数字排序。文本文件中的每个条目都在一个新行上,因此我希望对这些行进行数字排序。如果可能的话,一旦数字排序,我希望将数据写入另一个文本文件,标题为“newtime.txt”在同一目录中。当然,如果可能的话。 ;)

我正在努力的主要部分是文本文件中的内容不是静态的(例如包含x个行/单词等)。事实上,它会自动更新为几行。因此,我希望所有的数据都以数字方式更新。

文本文件遵循以下结构:

2 aullah1
12 name
7 username

当然,定期更新更多行。是否可以对线进行数字排序?此外,我计划使用Cron Job每5分钟重复一次脚本。 ;)

P.S。如果有两个相同的数字,会发生什么?那么它会按字母顺序排序数据吗?

感谢所有的帮助,我期待着您的回复;谢谢。 :)如果我没有清楚地解释任何内容和/或您希望我更详细地解释,请回复。 :)

谢谢。

4 个答案:

答案 0 :(得分:7)

假设您正在使用合理数量的行(数千,而不是数百万),这应该足够了。如果您有非常大的文件,则可能会使用file()

遇到内存问题
<?php

$data = file($file_path);
natsort($data);
file_put_contents($new_file_path, implode("\n", $data));

对于$ data中的每个元素,您可以使用循环file_put_contents替换单个fwrite()

natsort()将对数字进行正确排序(而不是asort(),它将在10之前放置10)。对于匹配的数字,它将按照您的预期排序,比较字符串的其余部分。

natsort()file()

答案 1 :(得分:5)

您可以通过

轻松完成此操作

将文件读入数组:

$lines = file($path_to_file);

对数组进行排序:

natsort($lines);

将数组写回新文件:

file_put_contents($path_to_new_file, implode(PHP_EOL, $lines));

答案 2 :(得分:3)

<?php
$lines = file("time.txt");
natsort($lines);
file_put_contents("newtime.txt", implode("\n", $lines));
?>

答案 3 :(得分:3)

当我遇到同样的问题时,这是迄今为止我发现的最快,最优雅的解决方案。 如果您使用的是Linux(在PHP配置中允许执行exec),您可以执行以下操作(假设您希望以数字方式对文件进行排序):

exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile);

基本上,执行bash命令 sort ,以数字方式对文件中的行进行排序。 如果要将数据保留在原始文件中,请执行以下操作:

exec("sort -n " . $pathToOriginalFile . " > " . $pathToSortedFile);
exec("rm " . $pathToOriginalFile);
exec("mv " . $pathToSortedFile . " " . $pathToOriginalFile);

如果您想要按字母顺序排序,只需排除-n( - 数字 - 排序)选项。

exec("sort " . $pathToOriginalFile . " > " . $pathToSortedFile);

对我来说,命令花了大约3秒钟来对服务器上的文件中的1000万行进行排序。

您可以在此处找到有关排序的更多信息http://www.computerhope.com/unix/usort.htm

希望它有所帮助。