fputcsv() добавлять кавычки к каждой записи?

С помощью этого кода я создаю файл экспорта CSV:

foreach ($data_for_export as $row) {
    $data = [];
    array_push($data, $row->product_id);
    array_push($data, $row->product_name);
    array_push($data, $row->product_code);
    array_push($data, $row->text);

    fputcsv($file, $data);
}

fclose($file);

Пример вывода:

2131,"Toys set 35", TSSET35, "Lorem ipsum dolor sit amet"

Я пробовал это с:

    preg_replace("/([a-z0-9]+)/i", '"$1"', $row->product_id)

    '"'.$row->product_id.'"'

С "preg_replace" я получаю в несколько раз больше кавычек, чем нужно...

Мне нужны котировки по всем экспортируемым товарам, как я могу это сделать?


person Caner    schedule 03.10.2016    source источник
comment
Почему котировки на все позиции являются обязательным требованием? CSV не требует этого как такового, поэтому PHP не добавляет кавычки к элементам, которым это не нужно.   -  person deceze♦    schedule 03.10.2016
comment
@deceze это требование клиента :(   -  person Caner    schedule 03.10.2016


Ответы (1)


Преобразуйте все данные в строку с помощью функции strval, затем попробуйте использовать fwrite вместо fputcsv :

function push(&$data, $item) {
    $quote = chr(34); // quote " character from ASCII table
    $data[] = $quote . addslashes(strval($item)) . $quote;
}

foreach ($data_for_export as $row) {
    $data = [];

    push($data, $row->product_id);
    push($data, $row->product_name);
    push($data, $row->product_code);
    push($data, $row->text);

    // separate array items by ',' and add the End-Of-Line character
    fwrite($file, implode(',', $data) . PHP_EOL); 
}

fclose($file);
person Mateusz Palichleb    schedule 03.10.2016
comment
Вам также может понадобиться избежать любых существующих кавычек в переменной $item. - person Andy E; 03.10.2016
comment
Я забыл об этом, спасибо за внимание. Код отредактирован. - person Mateusz Palichleb; 03.10.2016
comment
Вот лучшее решение: stackoverflow.com/questions/ 15133892/add-quotes-to-csv-export Вы можете использовать fputcsv, но вы должны настроить вложение как пустое. Затем вы добавляете вручную кавычки, где хотите. - person lamasgergo; 26.01.2018