如何在txt文件中对数据进行排序?

时间:2011-10-31 12:53:46

标签: php text-files fwrite

我已经生成了txt文件。如何按|之前的第一个数字对其中的行进行排序?

它的结构如下:

1|5
4|7
2|3
3|1

我尝试这样,但它显示错误。完整代码:

$str='';
    foreach ($_POST['answer'] as $num => $answer) {
        $str.="$num|".rtrim($answer)."\r\n";
    }
$data = explode("\n",$str);
sort($data,SORT_NUMERIC);
$date=date('y-m-d_H-i-s');
$fp=fopen("output/".$date."_out.txt", "w+");
$write=fwrite($fp, $data);
fclose($fp);
if ($write) echo 'Done!';

3 个答案:

答案 0 :(得分:3)

$file = file('path/to/file');
sort($file, SORT_NUMERIC);
fwrite('path/to/file', join("\n", $file));

答案 1 :(得分:2)

$data = trim(file_get_contents('file'));
$data = explode("\n",$data);
sort($data,SORT_NUMERIC);
$data = implode("\n",$data);

答案 2 :(得分:0)

当我遇到同样的问题时,这是迄今为止我发现的最快,最优雅的解决方案。 如果您使用的是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

希望它有所帮助。