2013-01-17 5 views
9

저는 CSV 파일이 있습니다. 그러면 CSV 파일의 데이터를 읽습니다. 그러면 CSV 파일의 첫 번째 줄을 건너 뛰고 싶습니다. 헤더가 포함될 것입니다. 이 코드를 사용하고 있습니다.PHP에서 fgetcsv 메서드의 첫 번째 줄을 건너 뛰십시오.

while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) 
    { 
    $sql = "INSERT into da1(contact_first, contact_last, contact_email) values('$emapData[0]','$emapData[1]','$emapData[2]')"; 
     mysql_query($sql); 

    } 

데이터를 데이터베이스에 삽입 할 때 헤더를 데이터베이스에 저장하면 안됩니다.

+6

[** 새 코드 **] (http://bit.ly/phpmsql)에 mysql_ * 함수를 사용하지 마십시오. 더 이상 유지 관리되지 않으며 공식적으로 사용되지 않습니다 (https://wiki.php.net/rfc/mysql_deprecation). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택한 경우 [여기 좋은 자습서입니다] (http://stackoverflow.com/a/14110189/1723893). –

답변

28

시도 :

$flag = true; 
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) { 
    if($flag) { $flag = false; continue; } 
    // rest of your code 
} 
+0

감사합니다 ... 성공적으로 완료되었습니다 .... –

+0

당신은 환영합니다. :) –

+0

btw, 당신은 그것을 당신의 문제를 해결하면 받아 들일 수있다 .. :) –

6

당신은 간단한 검사를 추가하고 검사가 실패 할 경우 쿼리를 건너 뛸 수 있습니다 :

$firstline = true; 
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) 
{ 
if (!$firstline) { 
    $sql = "INSERT into da1(contact_first, contact_last, contact_email) values('$emapData[0]','$emapData[1]','$emapData[2]')"; 
     mysql_query($sql); 
    } 
    $firstline = false; 
} 
30

을 while 루프를 시작하기 전에, 바로 첫 번째 라인을 얻을으로 아무것도하지 않고 그것. 이렇게하면 첫 번째 라인인지 테스트하는 로직이 필요하지 않습니다.

fgetcsv($file, 10000, ","); 
while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE) { 
    //.... 
} 
+2

이것은 "전에이 솔루션에서 생각하지 않은 이유는 무엇입니까?"라고 생각하게 만드는 대답의 종류입니다. 간단하고 효과적입니다. 그리고 x 줄을 건너 뛰고 싶다면 for 절을 추가하면된다. –

+0

이것은 플래그 기반 솔루션보다 나은 답변이며, while 루프 내부에 로직을 추가 할 필요가 없다고 말할 수 있습니다. – alex9311

+2

이 답변이 가장 좋았습니다. 가장 간단한 솔루션이 항상 최고입니다. 또한, 이것은 성능면에서 나머지 부분보다 약간 낫습니다. –

1

이 간단한 코드를 사용해보십시오.

$file = fopen('example.csv', 'r'); // Here example is a CSV name 
$row = 1; 
while (($line = fgetcsv($file, 10000, ",")) !== FALSE) { 
// $line is an array of the csv elements 
if($row == 1){ $row++; continue; } // continue is used for skip row 1 
// print_r($line); 
// rest of your code 
} 

조금 늦게

0

.. 그 work..Cheers를 희망하지만, 여기에 (모든 라인을 계산하지 않고) 그렇게하는 또 다른 방법입니다 : fgets

$file = fopen($filename, 'r'); // create handler 
fgets($file); // read one line for nothing (skip header) 
while (($line = fgetcsv($file, 10000, ",")) !== FALSE) { 
    // do your thing 
} 

와 이것을 더 우아하다고 생각할 수도 있습니다.

관련 문제