对未排序的文本文件进行排序,并按排序顺序重写为同一文本文件

时间:2010-04-13 14:35:25

标签: php

我有一个问题。我正在学习如何读/写文件,但在同一个PHP脚本中同时尝试同时执行这两个操作时遇到的麻烦。我有一个包含这样的文字的文本文件,

Richmond,Virginia
Seattle,Washington
Los Angeles,California
Dallas,Texas
Jacksonville,Florida

我编写了一个代码按顺序对它们进行排序,这将按城市的排序顺序显示。

<?php
$file = file("states.txt");
sort($file);
for($i=0; $i<count($file); $i++)
{
  $states = explode(",", $file[$i]);
  echo $states[0], $states[1],"<br />";
}
?>

由此,我如何将这些已排序的信息重新写回states.txt文件?

8 个答案:

答案 0 :(得分:5)

$file的内容写回文件的最简单方法是使用file_put_contentsimplode合作。

file_put_contents("states.txt", implode($file));

答案 1 :(得分:1)

尝试使用fopen和fwrite。

$fileWrite = fopen("filePah", "w");

for($i=0; $i<count($file); $i++)
{
    fWrite($fileWrite, $file[i]);
}
fClose($fileWrite);

答案 2 :(得分:1)

<?php
$file = file("states.txt");
sort($file);
$newContent = "";
for($i=0; $i<count($file); $i++)
{
  $states = explode(",", $file[$i]);
  $newContent .= $states[0] .', '. $states[1] . PHP_EOL;
}

file_put_contents('states.txt',$newContent);
?>

PHP: file_put_contents

答案 3 :(得分:1)

尝试这样的事情:

$fo = fopen("filename", "w");
$content = "";
for ($i = 0; $i < count($file); $i++) {
    $states = explode(",", $file[$i]);
    $content .= $states[0] . "," . $states[1] . "\n";
}
fwrite($fo, $content);
fclose($fo);

答案 4 :(得分:1)

这有点延伸,但我认为它可能对smb有用。我有一个m3u播放列表,只需要过滤,分类和打印的特定行。积分去魔鬼:

<?php

//specify that the variable is of type array
$masiv = array();

//read the file
$file = '/home/zlobi/radio/pls/all.m3u';  

$f = fopen($file, "r");

while ($line = fgets($f))
{
//skip rows with #EXT
if(strpos($line, "#EXT") !== false) continue;

$text = str_replace('.ogg', ' ', $line);  
$text = str_replace('/home/zlobi/radio/',' ',$text);

//add the song as an element in an array
$masiv[] = $text;
}
$f = fclose($f);

//sort the array
sort($masiv);

//pass via the array, take each element and print it
foreach($masiv as $pesen)

print $pesen.'<br/>';

?>

masiv是阵列,pesen是保加利亚语的歌:) 首先对首字母进行排序。

注册

答案 5 :(得分:0)

通过调用file将文件读入数组后。您可以使用fopen函数打开要写入的文件,使用fwrite写入文件并使用fclose关闭文件句柄:

<?php
$file = file("states.txt");                  // read file into array.
$fh = fopen('states.txt','w') or die("..."); // open same file for writing.
sort($file);
for($i=0; $i<count($file); $i++)
{
    $states = explode(",", $file[$i]);
    echo $states[0], $states[1],"<br />";
    fwrite($fh,"$states[0],$states[1] <br />"); // write to file.
}
fclose($fh); // close file.
?>

答案 6 :(得分:0)

打开文件,写入文件,关闭它(假设$ file是代码中的变量):

$fp = fopen('states.txt', 'w');
for($i=0; $i<count($file); $i++)
    fwrite($fp, $file[$i]);
}
fclose($fp);

请参阅http://php.net/manual/en/function.fwrite.php

答案 7 :(得分: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

希望它有所帮助。