Записать данные по конкретной строке в файл с помощью переполнения стека

Есть ли способ добавить данные в файл в определенной строке или что-то подобное?

У меня есть массив «ручной работы» в моем файле, и мне нужно сохранить начало и конец массива.

Я хотел бы иметь что-то вроде этого:

$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

Решение

При записи в файл существует не так много (по моему личному опыту!) Вариантов эффективное предварительные или промежуточные вставки. Почти весь рабочий мир опирается на добавление к файлам. Вы Можно сделать это, но только путем переписывания всего файла. По сути, вы должны «сдвинуть все остальные строки вниз», и это требует работы.

Если это то, что вам нужно сделать эффективно, рассмотрите более подходящую структуру данных. Возможно несколько массивов (например, возможно, в обратном порядке), несколько файлов, ключ сортировки для сортировки после загрузки и т. Д. Но вы вряд ли сможете решить проблему низкой производительности, когда добавление или вставка на файлы на диске. (И если вы делаете, вероятно, с некоторым редактированием ядра, то подумайте о том, чтобы заработать немного денег или помочь миру FOSS!)

Если вы делаете это в памяти, то структуры данных и шаблоны доступа становятся гораздо более надежными, и поэтому вы можете выполнять такие операции, как: array_unshift:

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

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

Другие решения

Вы не можете добавить строку в середине файла.
Вам нужно переписать файл примерно так (не дорого):

// 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

Чтобы добавить элементы в начале массива, используйте 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’ делает то же самое, но добавляет элемент (ы) в конец массива

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector