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

AUl*_*ah1 5 php sorting text-files

感谢您抽出宝贵时间阅读本文,我将感谢每一个回复,而不是内容的质量.:)

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

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

文本文件遵循以下结构:

2 aullah1
12 name
7 username
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢.

jas*_*bar 7

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

<?php

$data = file($file_path);
natsort($data);
file_put_contents($new_file_path, implode("\n", $data));
Run Code Online (Sandbox Code Playgroud)

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

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

natsort(),file()


Mis*_*cha 5

你可以轻松地做到这一点

将文件读入数组:

$lines = file($path_to_file);
Run Code Online (Sandbox Code Playgroud)

对数组排序:

natsort($lines);
Run Code Online (Sandbox Code Playgroud)

将数组写回新文件:

file_put_contents($path_to_new_file, implode(PHP_EOL, $lines));
Run Code Online (Sandbox Code Playgroud)

  • 最后一行应该是:`file_put_contents($ path_to_new_file,implode(PHP_EOL,$ lines));` (2认同)