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

时间:2016-01-13 20:42:25

标签: php arrays csv fgetcsv

我一直在研究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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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