将csv文件数据放入二级数组

Putting csv file data into a level 2 array

我一直在研究 fgetcsv() 并且有以下工作代码:

$file = fopen($pathToCsv,"r");
$data = array();

while(! feof($file))
  {
      array_push($data, fgetcsv($file));
  }

fclose($file);

但是,当我尝试调整它以动态接受存储在数组中的未知数量的 csv 文件时,事情停止了:

$year = $_POST['year'];
$m = "maths".$year;
$sheets = $$m; //an array containing between 5 an 8 paths to csv and other info
$data = array();

function ArrayFromCsv($file, $i) {
    while(! feof($file))
    {
        array_push($data[$i], fgetcsv($file)); //line 15
    } 
    fclose($file);
}



for ($i = 0; $i < count($$m); $i++){
    array_push($data, array());
    $x = fopen($sheets[$i]['csv'],'r');
    ArrayFromCsv($x, $i);
}

我得到:Warning: array_push() expects parameter 1 to be array, null given in ... on line 15

我不知道如何进一步研究这个。有没有更好的方法或明显的错误?我尝试了很多方法。

function ArrayFromCsv($file, $i) use (&$data) {
    while(! feof($file))
    {
        array_push($data[$i], fgetcsv($file)); //line 15
    } 
    fclose($file);
}

您无权访问函数 ArrayFromCsv 中的全局 $data 变量。您要么需要在函数内部使用 "global $data",which is bad, so DON'T 或者您可以在函数内创建一个临时数组,当函数结束时您 return 并将函数中的 returned 值放入 $data[$i]。此外,您不应该在函数外部打开文件并在函数内部关闭它。当您的代码变得更大时,这可能会在某天导致未定义的行为。