2017-07-18 53 views
1

假設我的csv文件會得到一個二維數組,如何將它們放入$array[][]如何從csv數據生成二維數組?

if (($handle = fopen($_SERVER['DOCUMENT_ROOT']."/file.csv", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     for ($c=0; $c < $num; $c++) { 
      $dtary[$d][$c] = $data[$c]; 
      if ($c == $num) { 
       $d++; 
      } 
     } 
    } 
    fclose($handle); 
} 
var_dump($dtary); 

我正在CSV文件的只是最後一排。

回答

1

根據您的for()循環條件,無法使$d遞增。當$c==$num時,循環內的代碼不會運行。

這是一種實際工作的方法,並提供了不致電count()也不增加計數器的好處。

代碼:(Demo

if(($handle=fopen($_SERVER['DOCUMENT_ROOT']."/file.csv","r"))!==FALSE){ 
    while(($data=fgetcsv($handle,1000,","))!==FALSE){ 
     $inner=[];    // start a fresh inner array 
     foreach($data as $d){ 
      $inner[]=$d;  // build inner array with current row's data 
     } 
     $dtary[]=$inner;  // push row data as a subarray into result array 
    } 
    fclose($handle); 
} 
var_export($dtary); 

雖然我會督促你來實現我的代碼片段,如果你想嘗試挽救你的原代碼,你可以做這樣的事情:

if(($handle=fopen($_SERVER['DOCUMENT_ROOT']."/file.csv","r"))!==FALSE){ 
    $d=0; 
    while(($data=fgetcsv($handle,1000,","))!==FALSE){ 
     $num=count($data); 
     for($c=0; $c<$num; $c++){ 
      $dtary[$d][$c]=$data[$c]; 
     } 
     $d++; 
    } 
    fclose($handle); 
} 
var_dump($dtary); 
+0

感謝代碼先生。爲什麼for循環內的代碼不增加?我不明白那一部分。 –

+0

您在循環內有一個「不合邏輯」的情況。 'for'循環的這個部分'$ c <$ num;'告訴循環何時「break」。如果你有'$ c <= $ num;'那麼最後的迭代將允許'$ c == $ num'爲真。這只是一個例子,你不應該改變條件,因爲它會導致其他問題。這對你有意義嗎?或者我應該嘗試以不同的方式解釋? – mickmackusa

+0

我現在得到它謝謝! –