簡體   English   中英

將CSV文件數據放入2級數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM