我一直在研究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
我不是如何进一步研究这个问题。有更好的方法或明显的错误吗?我尝试了很多方法。
答案 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]
。此外,您不应该在函数外部打开文件并在函数内部关闭它。当代码变大时,这可能会导致未定义的行为。