使用PHP将特定行的数据写入文件

时间:2017-10-27 14:21:25

标签: php file append

是否可以将数据附加到特定行或类似的文件上?

我有一个"手工制作"我的文件中的数组,我需要保持数组的开头和结尾。

我想有这样的事情:

$array = [
    *create new line and write data here*,
*previous data*,
*previous data*,
*previous data*,
];
编辑:我目前只知道如何在文件末尾添加数据,但我还没有找到合适的解决方案。如果我仅使用file_put_contents();附加我的数据,则它不会出现在数组中:

$array = [
    *previous data*,
    *previous data*,
    *previous data*,
    ];
*create new line and write data here*,
编辑:我得到了答案。没有有效的方法可以做到这一点。

3 个答案:

答案 0 :(得分:1)

您无法在文件中间添加一行。 你需要用这样的东西重写文件(不是内存昂贵):

// Read your old file
$read = fopen('myfile', 'r');
// Create a new file
$write = fopen('myfile.tmp', 'w');

while (!feof($read)) {
  $line = fgets($read);
  if (stristr($line, '$arr = [')) { // For your case
    $line .= "YOUR NEW LINE\n";
  }
  fputs($write, $line);
}

fclose($read);
fclose($write);
// Rename the new file
rename('myfile.tmp', 'myfile');

答案 1 :(得分:0)

要在数组的开头添加元素,请使用array_unshift:

$a=array ("content of a line", "another line");
array_unshift($a, "content to be added");

print_r($a); //print out to check

' array_push'做同样的事情,但在数组的末尾添加元素

答案 2 :(得分:0)

如果写入文件,高效前置或中间文件插入的选项并不多(根据我的个人经验!)。几乎所有的工作世界都依赖于追加文件。您可以这样做,但只能通过基本上重写整个文件。从本质上讲,你必须“移动所有其他线路”,这需要工作。

如果这是您需要有效完成的事情,请考虑更合适的数据结构。也许是多个数组(例如,可能是相反的顺序),多个文件,用于后加载排序的排序键等等。但是当预先添加或插入时,你不太可能解决性能下降的问题。磁盘上的文件。 (如果你这样做,可能涉及一些内核编辑,那么考虑赚钱或帮助FOSS世界!)

如果您在内存中执行此操作,那么数据结构和访问模式会更加健壮,因此您可以执行array_unshift之类的操作:

$arr = [
  "line 1",
  "line 2",
  "line ..."
];

array_unshift($arr, "line 0");
# $arr is now: [
#  "line 0",
#  "line 1",
#  "line 2",
#  "line ..."
#];