PHP чтение TXT файла в массив, правка и запись обратно в TXT
Помогите дописать - закипел!
Есть текстовый файл с содержимым:
111;0.1
222;0.2
333;0.3
444;0.4
Необходимо:
- сравнить переменные $a=555 и $b=0.5 с последней строкой, если $a > 444, то удалить первую строку и добавить новые данные последней строкой:
222;0.2
333;0.3
444;0.4
555;0.5
- а если $a = 444, но $b > 0.4, то изменить последнюю строку:
111;0.1
222;0.2
333;0.3
444;0.5
Новая переменная $a каждый раз будет увеличиваться (это текущее время в сек. - для наглядности обозначил 111,222,333)
Проблема: при записи сбивается содержимое файла - много пустых строк и только пару значений (точно показать не могу, т.к. работает в потоке и отследить одно тестовое изменение невозможно)
<?php
$a=555;
$b=0.5;
$file = 'file.txt';
$lines = file($file);
$last = explode(";", array_pop($lines)); //последний элемент массива
$old_A=$last[0];
$old_B=$last[1];
if($old_A == $a){
if($b > $old_B) //если новый больше старого
array_push($lines, $old_A.";".$b); // добавим новый в массив
else
array_push($lines, $old_A.";".$old_B); // вернем старый в массив
file_put_contents($file, implode(PHP_EOL, $lines));
} else {
unset($lines[0]); // удаляем первый элемент массива
array_push($lines, $old_A.";".$old_B);
array_push($lines, $old_A.";".$b);
file_put_contents($file, implode(PHP_EOL, $lines));
}
file_put_contents($file, $old_A.";".$b.PHP_EOL, FILE_APPEND);
Ответы (1 шт):
Автор решения: vormax
→ Ссылка
Вот сам решил
<?php
$a = 1000;
$b = 0.2;
$file="data.txt";
$file_lines = file($file, FILE_IGNORE_NEW_LINES);
$last_line = explode(";", end($file_lines));
if ($a > $last_line[0]) {
array_shift($file_lines);
$file_lines[] = $a . ";" . $b;
} elseif ($a == $last_line[0]) {
$file_lines[count($file_lines) - 1] = $a . ";" . $b;
}
file_put_contents($file, implode(PHP_EOL, $file_lines));
?>