[英]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
要這樣做,也可以在函數內部創建一個臨時數組,當函數結束時返回該數組並將其從函數返回的值放入$data[$i]
。 同樣,您不應該在函數外部打開文件,而在函數內部關閉文件。 當您的代碼變大時,有一天可能會導致未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.