2017-07-18 54 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

我现在得到它谢谢! –