CSV 파일 가져 오기를 찾고 있는데이 파일은 다소 큽니다. 나는 '는 CSV 데이터 ONLY
파일이 유효한 경우 삽입 할 수 있습니다대용량 CSV 파일 가져 오기
1) Scan the CSV to validate values in particular fields
2) Once the file is valid, import
(모 아니면도)
문제는 : 내가 뭘 찾고있어
은 2 가지입니다 두 번 반복하는 m, 첫 번째 CSV 필드를 확인하려면 유효하고 다른 for
저장하려면 루프.
문제는 메모리입니다. 메모리가 부족합니다 (파일은 50 개의 필드와 45 개의 필드가 있습니다)
더 쉬운 방법이 있습니까? AR 구현을 사용하고 있는데 PDO를 사용하는 것이 더 빠릅니까?
감사
편집 : 당신은 이미 첫 번째 foreach
의 데이터를 통해 반복하고
$data = array();
// open the file and loop through
if(($handle = fopen('details.csv', "r")) !== FALSE) {
$rowCounter = 0;
while (($rowData = fgetcsv($handle, 0, ",")) !== FALSE) {
if(0 === $rowCounter) {
$headerRecord = $rowData;
} else {
foreach($rowData as $key => $value) {
$data[ $rowCounter - 1][$headerRecord[ $key] ] = $value;
}
}
$rowCounter++;
}
fclose($handle);
}
$errors = array();
// loop to check through the fields for validation
for($i=0;$i<count($data);$i++) {
$row++;
if(!valid_email($data[$i]['EMAIL']))) {
$errors[] = 'Invalid Email Address';
break;
}
}
if(empty($errors)) {
for($j=0;$j<count($assocData);$j++) {
$row++;
$details = new Details();
// set the fields here
$details->email = $data[$j]['EMAIL'];
$details->save();
unset($details);
}
}
당신은'fopen'과'fgets'를 사용할 수 있으며 한 번에 한 줄씩 수동으로 파싱 할 수 있습니다. "유효합니까?"라는 것은 무엇을 의미합니까? – h2ooooooo
메모리 사용량을 줄이기 위해 코드를보아야 할 것입니다. 또한 행 단위가 아닌 단일 트랜잭션으로 삽입해야합니다. – mcryan
@ h2ooooooo 필자는 필드 측면에서 유효성을 검증 받았으며 (99로 시작하는 숫자 여야하고 15 자 이상이어야 함 등) 나는 fopen과 fgetcsv를 사용하여 열고 구문을 바꾼다 –