是否可以将数据附加到特定行或类似的文件上?
我有一个"手工制作"我的文件中的数组,我需要保持数组的开头和结尾。
我想有这样的事情:
$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*,
编辑:我得到了答案。没有有效的方法可以做到这一点。
答案 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 ..."
#];