2011-05-03 107 views
2

我試圖從上傳的文件中將數據插入到單維數組中。將csv文件數據插入到一個數組中(PHP)

的文件是這樣的,有一個學生數,像這樣一行:

392232,
392231,

這是最常見的方式,我在網上找到的:

while (($line = fgetcsv($file, 25, ',')) !== FALSE) { 
     //$line is an array of the csv elements 
     print_r($line); 
     } 

但是根據我的理解,這將爲每一行創建一個數組($line)。這不是我想要的。

除了我試過這個看看它是否工作,我的代碼在使用ftgetcsv()後沒有打印出數組。該文件是成功上傳

這裏是我的代碼:

if(isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])){ 

    //create file name 
    $file_path = "csv_files/" . $_FILES['csv_file']['name']; 

    //move uploaded file to upload dir 
    if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) { 
     //error moving upload file 
     echo "Error moving uploaded file"; 
    } 

    print_r($_FILES['csv_file']); 

    $file = fopen('$file_path', 'r'); 

    while (($line = fgetcsv($file, 25, ',')) !== FALSE) { 
    //$line is an array of the csv elements 
    print_r($line); 
    } 

    //delete csv file 
    unlink($file_path); 
} 

首先,任何人都可以很明顯的看出爲什麼它wouldnt工作,至少把它們打印數據的單獨陣列(每行)。

其次,是否可以設置它,以便它創建文件中所有行的1d數組?

非常感謝,

回答

2

問題1是因爲

print_r($_FILES['csv_file']); 
$file = fopen('$file_path', 'r'); 

應該是:

$file = fopen($file_path, 'r'); 

和問題2,檢查出array_push

1

1問:

這條線實際上會嘗試打開一個名爲「$ FILE_PATH」因爲您使用單引號文件(所以它不會擴展到價值變量)。你可以刪除引號。

$file = fopen('$file_path', 'r');

$file在此之後爲空。

第二個問題:

如果你想要做的是轉換一個文件到一個數組的線,你可以使用以下內容之一:
file() - 讓整個文件到文件的行一維數組(最接近你想要的)
fgets() - 每個調用每行獲得一個字符串;保持通話,直到返回false同時
file_get_contents()得到每行一個 - 讓整個文件轉換成字符串和處理,你喜歡

+0

正是我剛纔輸入的內容。 – Wiseguy 2011-05-03 18:04:07

1

根據到PHP.net $行必須返回數組。 「返回包含讀取字段的數組。「 但如果你確定這是隻包含一個學號可以使用$行[0]拿到第一線值(忽略」,「)

1

這裏是你的代碼一些一般性的評論:

  1. 您傳遞文件路徑進入fopen()函數不正確。變量不應該用單引號包圍。
  2. 既然你正在處理之後刪除CSV文件,移動是不必要的。只需使用$_FILES['csv_file']['tmp_name']爲路徑到文件
  3. 由於只有一個條目每行在您的CSV文件中,只需訪問從fgetcsv()返回的陣列的第一個元素:$numbers[] = $line[0];