Я использую функцию php fgetcsv() для чтения из файла csv. Структура файла csv такова, что самая первая строка содержит данные, которые я хочу импортировать, в отличие от заголовка столбца. Я хотел бы импортировать из первой строки, но я замечаю, что первая строка игнорируется.Почему fgetcsv пропускает первую строку?
Если я оставил первый ряд пустым, то такое же поведение сохранится. Только когда я добавляю некоторые фиктивные данные в ячейках первой строки, что вторая строка, которая содержит данные, которые я хочу импортировать, фактически импортируется, а все остальные строки после этого импортируются, как и следовало ожидать.
<?php
$handle = fopen($_FILES['materials']['tmp_name'], "r");
$data = fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($this->checkMaterialsDuplicate($data[3]) != false) {
Session::setSession('import_failure', 'The Materials for TX '.
$this->_tx_no.' have already been added.');
Helper::redirect('?section=store&subsection=import_design&page=import_design');
}
echo "<pre>";print_r($data);echo "</pre>";exit;
$this->_fields[] = 'implicit_qty_of_fittings';
$this->_values[] = $this->db->escape($data[1]);
$this->_fields[] = 'qty_of_desired_materials';
$this->_values[] = $this->db->escape($data[2]);
$this->_fields[] = 'tx_no';
$this->_values[] = $this->db->escape($data[3]);
$this->_fields[] = 'contractor_name';
$this->_values[] = $this->db->escape($data[4]);
$this->_fields[] = 'contractor_id';
$this->_values[] = $this->db->escape($data[5]);
$this->_fields[] = 'issue_date';
$this->_values[] = $this->db->escape($data[6]);
$this->_fields[] = 'due_date';
$this->_values[] = $this->db->escape($data[7]);
$this->_fields[] = 'fitting_id';
$this->_values[] = $this->db->escape($data[8]);
$this->_fields[] = 'qty_multiplied_fittings';
$this->_values[] = $this->db->escape($data[9]);
$this->_fields[] = 'imported';
$this->_values[] = 1;
$sql = "INSERT INTO `{$this->_table_6}` (`";
$sql .= implode("`, `", $this->_fields);
$sql .= "`) VALUES ('";
$sql .= implode("', '", $this->_values);
$sql .= "')";
if (!$this->db->query($sql)) {
$error[] = $sql;
}
$this->_subcontractor_name = $data[4];
$this->_subcontractor_id = $data[5];
unset($this->_fields);
unset($this->_values);
}
Ссылка на образец CSV here
Там нет такой опции, чтобы пропустить первую строку в файл, как правило, разработчик добавить это поведение вручную. Можете ли вы добавить главу своего файла (5-10 строк), чтобы мы могли попытаться воспроизвести вашу проблему. –
Эй, александр здесь ссылка на образец файла http://s000.tinyupload.com/download.php?file_id=89300381502885483382&t = 8930038150288548338292456 – andromeda
Как вы можете видеть, первый столбец в первой строке имеет значение 553, но при импорте строка, начинающаяся со значения 554, является первой, которая будет распечатана с использованием print_r() для переменной $ data – andromeda