сохранение данных в CSV-файл с помощью PHP - PullRequest
0 голосов
/ 27 февраля 2019

Я беру данные из формы и сохраняю их в файле CSV с помощью PHP.Мое единственное поле в форме содержит запятую, то есть между двумя словами есть запятая, и мне нужно сохранить ее в файле CSV с запятой.Но когда я сохраняю его, значения слева и справа от запятой хранятся в разных строках.Как мне это сделать?Мой код:

enter code here
<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$output = $food . "\n";
$fp="input.csv";
if (file_exists($fp)) {
file_put_contents($fp, $output, FILE_APPEND);
}
else {
file_put_contents($fp, $output);
}
?>

1 Ответ

0 голосов
/ 27 февраля 2019

По умолчанию в файлах CSV в качестве разделителя полей используется запятая, поэтому, если значение содержит запятые, его необходимо заключать в кавычки так же, как и в случае пробелов.Если вы используете "file_put_contents", вам нужно сделать это вручную с помощью чего-то вроде этого:

<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$output = preg_match('/[, ]/', $food) ? "\"$food\"\n" : "$food\n";
file_put_contents('input.csv', $output, FILE_APPEND);
?>

Функция "preg_match" проверяет $ food на запятые или пробелы и, если они найдены, $ food имеет двойные кавычки идобавляется перевод строки, в противном случае добавляется только перевод строки.

Обратите также внимание, что вам не нужно проверять, существует ли файл, потому что, если его нет, функция file_put_contents автоматически создает его независимо от того, существует он или нет.Вы используете флаг FILE_APPEND.

Но гораздо лучшим решением было бы использование специальных функций CSV, которые автоматически выполняют любые необходимые кавычки или экранирование:

<?php
//read data from form
$food = filter_input(INPUT_POST, "food"); 
$fields = array($food);
$fp = fopen('input.csv', 'a+');
fputcsv($fp, $fields);
fclose($fp);
?>

Использование fopen в "a +msgstr "mode заставляет его действовать так же, как file_put_contents, с флагом FILE_APPEND.Так что нет необходимости проверять, существует ли файл здесь заранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...