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如果有两个相同的数字,会发生什么?那么它会按字母顺序排序数据吗?
感谢所有的帮助,我期待着您的回复; 谢谢.:)如果我没有清楚地解释任何内容和/或您希望我更详细地解释,请回复.:)
谢谢.
假设您正在使用合理数量的行(数千,而不是数百万),这应该足够了.如果您有非常大的文件,则可能会遇到内存问题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之前).对于匹配的数字,它将按照您的预期排序,比较字符串的其余部分.
你可以轻松地做到这一点
将文件读入数组:
$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)