@TopClans

Почему fputcsv оборачивает строки в кавычки?

Скрипт собирает данные из разных .xls файлов в массив, который потом тут же выгружает в CSV.

Есть 2 вида файлов, оба .XLS, но структура немного разная: в одном строки объединены, поэтому приходится с ними возиться; к тому же всё равно в одной из этих строк хранится сразу несколько нужных данных, хорошо хоть отделённых символом "|".
Так или иначе, из обоих видов файлов получается один и тот же массив: Артикул, производитель, цена, количество.

Примеры массивов, из двух разных файлов:
Array
(
    [1] => Array
        (
            [sku] => KR0867M
            [maker] => KRAUF
            [name] => Модуль в сборе с бензонасосом
            [quantity] => 1
            [price] => 2508
        )

    [2] => Array
        (
            [sku] => SMD030764
            [maker] => CHERY
            [name] => Прокладка помпы
            [quantity] => 1
            [price] => 75
        )
)


Array
(
    [1] => Array
        (
            [sku] =>  2300235K01J 
            [maker] => GREAT WALL 
            [name] =>  ПОДШИПНИК РОЛИКОВЫЙ ШЕСТЕРНИ БЛОКИРОВКИ ПЕРЕДНЕГО МОСТА HOVER  - 2300235-K01
            [quantity] => 1
            [price] => 117.08
        )

    [2] => Array
        (
            [sku] =>  2310012K01 
            [maker] => GREAT WALL 
            [name] =>  ШЕСТЕРНЯ БЛОКИРОВКИ ПЕРЕДНЕГО МОСТА HOVER
            [quantity] => 1
            [price] => 1266.19
        )
)


Но почему-то при экспорте некоторые элементы массивов обрамляются кавычками и пробелом, а некоторые - нет.

Вот код для записи в .CSV:
$filename = explode(".", $file);
$output = fopen('csv/'.$filename[0].'.csv', 'w');
fputs($output, chr(0xEF) . chr(0xBB) . chr(0xBF)); // BOM
foreach ($row as $key) 
{
        fputcsv($output, $key, ';');
}


Вот что записывается в .CSV файлы, соответственно:
KR0867M;KRAUF;"Модуль в сборе с бензонасосом";1;2508
SMD030764;CHERY;"Прокладка помпы";1;75


" 2300235K01J ";"GREAT WALL ";" ПОДШИПНИК РОЛИКОВЫЙ ШЕСТЕРНИ БЛОКИРОВКИ ПЕРЕДНЕГО МОСТА HOVER  - 2300235-K01";1;117.08
" 2310012K01 ";"GREAT WALL ";" ШЕСТЕРНЯ БЛОКИРОВКИ ПЕРЕДНЕГО МОСТА HOVER";1;1266.19


Меня напрягает то что в одном случае в кавычки оборачивается только наименование номенклатуры, а в другом - также и артикул, и производитель.
Попробовал посмотреть тип переменной с производителем: gettype($key['maker']) - выдаёт что во всех случаях string, но блин почему тогда в одном случае string оборачивается в кавычки, а в другом - нет?

Не понимаю, в чём проблема?

UPD: разобрался! заметил что в одном случае в файле есть кавычки и пробел, в другом - просто кавычки. увидел, что при делении строки не избавился от пробелом. функция trim убрала пробелы и решила проблему
  • Вопрос задан
  • 1120 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы