[英]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.