Есть текст в файле
1;A;B;C;D;F;E
1;A;B;C;D;F;G
я его граблю, создаю массив из данных в тексте, потом изменяю массив, и добавляю опять в файл, но происходит дублирование в текстовом файле как будто удаление $handle
происходит один раз;
1;A;B;C;D;F;E
1;A;B;C;D;F;G;Dobavleno
1;A;B;C;D;F;E;Dobavleno
1;A;B;C;D;F;G;Dobavleno
Как прикрутить return или обернуть в функцию? Желаемый итоговый результат:
1;A;B;C;D;F;E;Dobavleno
1;A;B;C;D;F;G;Dobavleno
Логика:
$Data=array('E','G'); //массив для поиска в тексте
foreach ($Data as $key1 => $sec) {
# code...
$file1 = fopen("test.txt", "r");
$files = array($file1);
foreach($files as $file){
while (($line = fgets($file)) !== false) {
$value[]= explode(';',trim($line)); //создаём массив данных перед удалением содержимого из файла
}
}
$handle = fopen("test.txt","w+"); // Открыть файл, сделать его пустым
sleep(1);
fclose($handle);
foreach ($value as $key => $value1) {
$fp=$value[$key];
if($value1[6]==$sec){
if(isset($value1[7])){
$fp=array_replace($fp, array('7'=>"Dobavleno"));
}else{
$fp=array_replace($fp, array('7'=>"Dobavleno")); //изменяем массив
}
}
$toBeSaved = implode(';',$fp);
file_put_contents('test.txt', $toBeSaved."\r\n", FILE_APPEND | LOCK_EX); // записывам из массива построчно в файл
}
}
Ну во первых вы в двух циклах каждый раз открываете файл и записываете строки. И сам foreach
так же местами надо поменять. Вам надо в каждой строке из файла искать данные из массива для поиска. Значит сначала идем по строчкам, потом в каждой из них ищем нужную букву. Если есть - добавляем, уже после того как поискали все буквы из массива для поиска можно записать новую строчку в файл.
$Data = array('E', 'G'); //массив для поиска в тексте
# code...
$file1 = fopen('test.txt', 'r');
$files = array($file1);
foreach ($files as $file) {
while (($line = fgets($file)) !== false) {
$value[] = explode(';', trim($line)); //создаём массив данных перед удалением содержимого из файла
}
}
$handle = fopen('test.txt', 'w+'); // Открыть файл, сделать его пустым
sleep(1);
fclose($handle);
foreach ($value as $key => $value1) {
$fp = $value[$key];
foreach ($Data as $key1 => $sec) {
if ($value1[6] === $sec) {
if (isset($value1[7])) {
$fp[7] = 'Dobavleno';
} else {
$fp[7] = 'Dobavleno'; //изменяем массив
}
}
}
$toBeSaved = implode(';', $fp);
file_put_contents('test.txt', $toBeSaved . "\r\n", FILE_APPEND | LOCK_EX); // записывам из массива построчно в файл
}
какой-то у вас сложный, и местами нелогичный код (одинаковые ветки if-else). Зачем это построчное чтение, если вы все равно весь файл в память загружаете?
$haystack = ['E', 'G'];
$data = file("test.txt");
foreach($data as &$l){
$tmp = explode(';', $l);
if(in_array($tmp[6], $haystack)) continue;
$l = trim($l) . ";append\r\n";
}
file_put_contents("test.txt", implode('', $data));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В общем - у меня на странице есть 2 формыОни в разных местах страницы и даже в разных файлах темы
Есть таблица на странице которую я парсю с simple_html_dom