繁体   English   中英

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

[英]Write data on specific line into the file with PHP

有没有办法将数据追加到特定行或类似的文件?

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

我想要这样的东西:

$array = [
    *create new line and write data here*,
*previous data*,
*previous data*,
*previous data*,
];

编辑:我目前只知道如何在文件末尾附加数据,而且我还没有找到合适的解决方案。 如果我仅使用file_put_contents();附加数据file_put_contents(); ,它将不在数组中:

$array = [
    *previous data*,
    *previous data*,
    *previous data*,
    ];
*create new line and write data here*,

编辑:我得到了答案。 没有有效的方法来执行此操作。

您不能在文件中间添加一行。 您需要使用类似这样的文件来重写文件(不消耗内存):

// 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');

要在数组的开头添加元素,请使用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'执行相同的操作,但在数组末尾添加元素

如果要写入文件,则没有很多(以我个人的经验!) 有效的前置或中间文件插入选项。 几乎所有工作环境都依赖于附加到文件。 可以做到,但是只能通过基本上重写整个文件来实现。 本质上,您必须“将所有其他行都向下移动”,这需要工作。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM