2017-11-07 1 views
0

str_getcsv을 사용하는 동안이 정의되지 않은 오프셋 통지를 없애고 CSV 파일을 읽고 키를 할당하는 데 많은 문제가 있습니다.PHP str_getcsv 가져 오기 정의되지 않은 오프셋

다른 스레드에서 언급 된 issetarray_key_exists을 시도했습니다. isset은 정의되지 않은 인덱스 사항을 해결했지만 나는 정의되지 않은 오프셋 고지를 제거 할 수 없습니다 : 문제

$file = file("lookup.csv",FILE_SKIP_EMPTY_LINES); 
$csv = array_map("str_getcsv",$file, array_fill(0, count($file), ';')); 
$keys = array_shift($csv); 
    foreach ($csv as $i=>$row) { 
     $csv[$i] = array_combine($keys, $row); 
    } 
$numberOfRows = count($csv); 
$numberOfColumns = count(current($csv)); 
    for ($i = 0; $i <= $numberOfRows; $i ++) { // first loop to run thru to find correct sku template name in csv file 
     if ($csv[$i]['sku'] === $sku) { // if sku matches // Getting Undefined offset on this line 
     for ($j = 0; $j <= $numberOfColumns; $j++) { // second loop to create variables from header line 
      ${$keys[$j]} = isset($csv[$i][$keys[$j]]) ? $csv[$i][$keys[$j]] : ''; // // Getting 2 Undefined offset notices on this line 
      } 
     } 
    } 

CSV 파일 일부 빈 셀을 가지고있다. 그 빈 셀은 유지 될 것입니다 (저는 그것에 대해 아무것도 할 수 없습니다).

누구든지 올바른 방향으로 나를 가리킬 수 있습니까? 어떤 도움이 많이 감사합니다, 감사합니다!

+0

이 $ 파일을 시도 = 파일 ('lookup.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); –

답변

0

배열의 마지막 요소를 제거하려고하면 파일의 여분의 줄이 실제 마지막 줄의 끝에있는 새로운 줄 문자 때문에 선택되기 때문에 빈 항목이되는 경우가 있습니다.

$csv = array_map("str_getcsv",$file, array_fill(0, count($file), ';')); 
array_pop($csv); 
+0

답장을 보내 주셔서 감사합니다. 불행히도 아무런 차이가 없지만 아직 정의되지 않은 오프셋이 그대로 있습니다. 또한 CSV 파일에서 수동으로 마지막 빈 줄을 제거하여 변경된 사항이 있는지 확인했습니다. – HMS

0

좋아, 실제로 나는 그걸 알아낼 수 있었다. -

솔루션

이는 isset을 추가했다가 다른 사람 도움이 단지의 경우, 여기 내 솔루션입니다 :

for ($i = 0; $i <= $numberOfRows; $i ++) { 

    $csv[$i]['sku'] = isset($csv[$i]['sku']) ? $csv[$i]['sku'] : ''; // <-- isset added 

     if ($csv[$i]['sku'] === $sku) { 

     for ($j = 0; $j <= $numberOfColumns; $j++) { 

       $keys[$j] = isset($keys[$j]) ? $keys[$j] : ''; // <-- isset added 

       $csv[$i][$keys[$j]] = isset($csv[$i][$keys[$j]]) ? $csv[$i][$keys[$j]] : ''; 

       ${$keys[$j]} = $csv[$i][$keys[$j]]; 
      } 
     } 
    } 
관련 문제