@Emmet1

Почему не преобразовывает csv файл в соответствующий массив?

здравствуйте. Впервые работаю с форматом csv.
Задача простая, сделать из полученного файла массивы в цикле и записать данные в БД.
Вт так выглядит сам файл перед его сохранением в формате csv.
clip2net.com/s/3IOQQvv
Для начала я написал код, который должен вывести данные файла в формате массива на экран:
$filePath = get_template_directory() . '/s2.csv'; //сам файл
$csv = fopen($filePath, "r");
$info = fgetcsv ($csv, 1000, ";");

while(($info = fgetcsv($csv , 1000, ";")) !== false ){
	print_r($info); //вывод массивов
}

По логике, должно вывести три массива на экран в котором данные а-а3, в-в3, с-с3.

Но у меня выводит только два массива. Первая строка "а" куда-то пропадает.
Array
(
    [0] => b
    [1] => b1
    [2] => b2
    [3] => b3
)
Array
(
    [0] => c
    [1] => c1
    [2] => c2
    [3] => c3
)
  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
AloneCoder
@AloneCoder
[object Object]
$filePath = get_template_directory() . '/s2.csv'; //сам файл
$csv = fopen($filePath, "r");

while(($info = fgetcsv($csv , 1000, ";")) !== false ){
  print_r($info); //вывод массивов
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron
Работаю с Bitrix24
Я бы не указывал длину (а если строчка 1001 символ?) и использовал бы SPL:

$file = new SplFileObject( get_template_directory() . '/s2.csv' );
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl(';');
foreach ($file as $k => $row)
{
	if ( $k < 1 )
	{
		/* @var array Строка с названиями полей. Читается один раз */
		var_dump($row);
	}
	else
	{
		/* @var array Строки из файла */
		var_dump($row);
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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