如何从csv数据生成二维数组?

时间:2017-07-18 04:05:35

标签: php csv multidimensional-array increment

假设我的csv文件将获得二维数组,如何将它们放入$array[][]

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 个答案:

答案 0 :(得分:1)

根据您的$d循环条件,for()无法递增。在$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);