2016-11-24 29 views
0

這次我拿到頭不知道我怎樣才能得到整個CSV文件的數據並打印 這裏是我的功能,請幫助前進如何讓整個CSV文件和打印(laravel 5.3)

public function import(Request $request){ 
     $upload =$request->file('upload-file'); 
     $filepath= $upload->getRealPath(); 

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

     $header=fgetcsv($file); 
     dd($header); 
     die; 
    } 

我想這個頭不應該來這裏比其他頭整個數據應該是打印 其foreach循環

foreach($users as $user) { 
} 

這裏是標頭,我得到

array:13 [▼ 
    0 => "Account Name" 
    1 => "Group" 
    2 => "Host" 
    3 => "Username" 
    4 => "Password" 
    5 => "Port" 
] 

回答

1

fgetcsv返回它正在查看的行並將「指針」移動到下一行。如果你想整個CSV文件加載到一個數組,你需要遍歷文件:

<?php 
$data = []; 
if (($handle = fopen("test.csv", "r")) !== FALSE) { 
    $i = 0; // Define a counter that tells us which row we're looking at 
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     // Only capture rows that are greater than 0, i.e. we skip the first row (Headers) 
     if ($i > 0) { 
      $data[] = $row; 
     } 

     $i++; 
    } 
    fclose($handle); 
} 

var_dump($data); 

創建一個用戶對每個數據行應該很容易地:

foreach ($data as $item) { 
    User::create($item); 
} 

關於驗證上傳的文件是一個CSV文件,您可以使用Laravel's validation rules,特別是關於mime的文件。例如:

'file' => 'file|mimes:csv' 

如果你想要做你的功能了一些驗證,你可以使用一些你從$request->file('...');坐上UploadedFile實例的方法,特別是你可以使用$upload->getClientOriginalExtension()獲取文件的文件擴展名這是上傳,或者你可以使用$upload->getClientMimeType()獲取文件的MIME類型,它在一個CSV的情況下應該是text/csv

if ($upload->getClientOriginalExtension() != 'csv') { 
    // Handle your validation error, probably throw an exception 
} 

if ($upload->getClientMimeType() != 'text/csv') { 
    // Handle error 
} 
+0

感謝我得到的數據,現在我怎麼能跳過標題的意思是頭不應該來in數據 –

+0

假設頭是第一行,你可以簡單地省略第一行,當你捕獲的數據,我會更新我的答案 – Jonathon

+0

是IST行將永遠頭文件@JONATHON –