2013-07-15 2 views
2

Когда мой клиент предоставляет свои входы в файл Excel, им нужен заголовок столбца. Но когда они экспортируют файл в CSV (.csv), он включает в себя заголовки столбцов. Это проблема.Как исключить заголовок столбца из CSV-файла в PHP?

 
+---------+--------+-------------+ 
| Post id | Name | Designation | 
+---------+--------+-------------+ 
    101  noYon  designer 
    102  nakib  accountant 
    103  nishi  developer 
+---------+--------+-------------+ 

В моей CSV (через запятую) я получил:

 
Post id,Name,Designation 
101,noYon,designer 
102,nakib,accountant 
103,nishi,developer 

мне нужно исключить головы столбцов (первая строка) из CSV при загрузке его в MySQL с помощью PHP.

Есть ли способ?

ответ

1

Простое решение: прочитать первую строку и отбросить его, прежде чем читать остальную часть файла построчно в цикле:

//get the csv file 
$file = $_FILES[csv][tmp_name]; 
$handle = fopen($file,"r"); 
fgetcsv($handle); // Discard first line. If we know the maximum line length 
        // add it as second argument: it's slightly faster 

while($data = fgetcsv($handle)) { 
    $query = mysqli->query("INSERT INTO table (post_id,name,designation) VALUES ('". 
       implode($data,"','")."'"; 
} 

Более быстрое решение, которое я не закодирован здесь: добавить несколько наборов от INSERT примерно:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9); 
1

С помощью This article и This forum thread Я подошел к жизнеспособного решения для меня с личной помощью моего коллеги г-жа Tahmina Aktar Ниси. Надеюсь, это поможет любому, кто пытается что-то вроде этого:

 //get the csv file 
     $file = $_FILES[csv][tmp_name]; 
     $handle = fopen($file,"r"); // read the file 
     ?> 

     <?php 
     // make the loop and do upload 

     $find_header = 0; // a simple counter 

     while($data = fgetcsv($handle,6000,",","'")) { 
      $find_header++; //update counter 

      if($find_header > 1) { 
       $sql = mysql_query("INSERT INTO table_name (
         post_id, 
         name, 
         designation 
        ) 
        VALUES 
        (
         '".$data[0] ."', 
         '".$data[1] ."' 
         '".$data[2]."' 
        ) 
       "); 
      } 
     } // endwhile 

Логика очень проста и немного ребяческая. Если мы знаем, как работает fgetcsv(). fgetcsv() является:

fgetcsv() функция анализирует строку из открытого файла, проверка полей CSV.

Функция fgetcsv() прекращает возврат на новую линию, на указанную длину или на EOF, в зависимости от того, что наступит раньше.

Это означает, что он извлекает каждую строку CSV каждый раз, когда петлевые раунды. Поэтому, если мы передаем простой счетчик PHP и исключим первую строку, то это так просто.

И, конечно же, не забывайте дезинфицировать данные, используя PHP дезинфицирующей функции, такие как trim() или addslashes() и т.д. :)

Вы можете получить всю мою кучу кодов HERE.

Смежные вопросы