file_put_contents в цикле добавляет пустую строку в конце

Статус
В этой теме нельзя размещать новые ответы.

verfaa

Профессор
Регистрация
29 Янв 2007
Сообщения
416
Реакции
49
Имеется массив:
Код:
......
[matchmaker] => Array
                                (
                                    [0] => dating matchmaker in boston upscale matchmaker

                                    [1] => matchmaker rockford il

                                    [2] => lucas krantz matchmaker painting

                                    [3] => matchmaker compatibility

                                    [4] => i love lucy the matchmaker
)

Необходимо данные из этого массива записать в файл по одному кею на каждую строку.
И проблема в том, что код
Код:
...
foreach($d_key_arr as $key){
     if(trim($key) != "") file_put_contents(trim($dor).".txt", $key, FILE_APPEND);
}
...
выполняет эту работу, только в конце всегда вставляет пустую строку. И это несмотря на то, что пустых элементов в массиве нет.
Почему так происходит и какое условие можно поставить для предотвращения попадания пустых строк в результирующий файл?
 
Имеется массив:
Код:
......
[matchmaker] => Array
                                (
                                    [0] => dating matchmaker in boston upscale matchmaker

                                    [1] => matchmaker rockford il

                                    [2] => lucas krantz matchmaker painting

                                    [3] => matchmaker compatibility

                                    [4] => i love lucy the matchmaker
)

Необходимо данные из этого массива записать в файл по одному кею на каждую строку.
И проблема в том, что код
Код:
...
foreach($d_key_arr as $key){
     if(trim($key) != "") file_put_contents(trim($dor).".txt", $key, FILE_APPEND);
}
...
выполняет эту работу, только в конце всегда вставляет пустую строку. И это несмотря на то, что пустых элементов в массиве нет.
Почему так происходит и какое условие можно поставить для предотвращения попадания пустых строк в результирующий файл?
Пробовали без FILE_APPEND?
Кодировка какая? Возможно не дописан BOM?
Это из разряда предположений.
 
$key идёт с переносом строки. Сделайте трим и проверку на последний элемент

PHP:
$lastI = count($d_key_arr)-1;
foreach($d_key_arr as $i=> $key){
if(trim($key) != "") 
if($i ==$lastI ){
file_put_contents(trim($dor).".txt", trim($key), FILE_APPEND);
}else{
file_put_contents(trim($dor).".txt", trim($key)."\r\n", FILE_APPEND);
}

}
 
Последнее редактирование модератором:
$key идёт с переносом строки. Сделайте трим и проверку на последний элемент

PHP:
$lastI = count($d_key_arr)-1;
foreach($d_key_arr as $i=> $key){
if(trim($key) != "")
if($i ==$lastI ){
file_put_contents(trim($dor).".txt", trim($key), FILE_APPEND);
}else{
file_put_contents(trim($dor).".txt", trim($key)."\r\n", FILE_APPEND);
}

}
а зачем проверять $i раз если массиву можно просто последний элемент тримнуть сразу и всё?
 
Вы, скорее всего, трим не туда приписали:
Код:
foreach($d_key_arr as $key){
     if(trim($key) != "") file_put_contents($dor.".txt", trim($key)."\n", FILE_APPEND);
}

И если у Вас все записи с новой строчки в файле получаются - это значит перенос строки уже в массиве и удивляться нечему

Если бы переносов строк в массиве не было, было бы это:
Код:
keykeykeykey
 
file_put_contents — Пишет строку в файл
Функция идентична последовательным успешным вызовам функций fopen(), fwrite() и fclose().
Для просмотра ссылки Войди или Зарегистрируйся

Использовать её в цикле очень плохая практика из-за множества лишних fopen(), fclose()

Пробовали без FILE_APPEND?
Без этого параметра файл будет перезаписываться при каждом вызове функции, что полностью ломает логику при такой реализации кода.

PHP:
$lastI = count($d_key_arr)-1;
foreach($d_key_arr as $i=> $key){

if($i ==$lastI ){
Если у нас были операции над этим массивом, которые удалили часть элементов, без смешения индексов, имеем ошибку в логике реализации и возможный недостача строк в результате ;)
При таком алгоритме надо использовать $i++;

а зачем проверять $i раз если массиву можно просто последний элемент тримнуть сразу и всё?
Попробуй набросать рабочий код. Нам всё равно надо проверять if($i ==$lastI ){ для определения, что элемент последний. Хотя твоё замечание может уменьшить количество кода.

-----------------------------------------------------------------------------------------------

А вот так это можно решить в одну строку :crazy::
PHP:
file_put_contents('not_empty_to_file.txt', implode("\r\n", array_filter(array_map('trim', $matchmaker))));
Или вот так, чтобы было понятней:
PHP:
$matchmaker = array_map('trim', $matchmaker); //тримаем все значения
$matchmaker = array_filter($matchmaker); //удаляем все пустые, так же удалит строки состоящие только из нуля '0'
file_put_contents('not_empty_to_file.txt', implode("\r\n", $matchmaker)); //предполагается что в этот файл мы дописывать больше не будет, иначе надо еще пару строк
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху