2013-06-20 59 views
0

我在控制器操作中導入了一個csv文件。 csv文件的結構如下所示。爲csv文件創建帶有鍵值對的php數組

Name , Phone , address 
user1 , 99887766 , xyz 
user2, 99885566 , hjj 

現在我想要的數組與csv頭信息作爲鍵和行數據的值。所需的輸出應該是這樣的。

[ 
"0" => [ "Name" => "user1" , "Phone" => "99887766" , "address" => "xyz" ], 
"1" => [ "Name" => "user2" , "Phone" => "99885566" , "address" => "hjj" ], 
] 

我能夠用php爆炸得到行數據。問題在於將鍵設置爲標題。 任何人都可以幫我 - 這個。

回答

2

你可以試試下面的代碼

$rows = file($csv_data_file); 
$header = array_shift($rows); //get the header out 
$header = explode(",", $header); 
$final_array = array(); 
foreach ($rows as $row) { 
     $row = explode(",", $row); 
     $final_array[] = array($header[0] => $row[0], $header[1] => $row[1], $header[2] => $row[2]); 
} 
4

爆炸可能是危險的 - 如果有任何地址的一個逗號,該行變爲無效。我建議使用本地功能str_getcsv()

Here is an example爲csv創建關聯數組的一般解決方案。以下是該功能的副本。

function csv_to_array($filename='', $delimiter=',') 
{ 
    if(!file_exists($filename) || !is_readable($filename)) 
     return FALSE; 

    $header = NULL; 
    $data = array(); 
    if (($handle = fopen($filename, 'r')) !== FALSE) 
    { 
     while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) 
     { 
      if(!$header) 
       $header = $row; 
      else 
       $data[] = array_combine($header, $row); 
     } 
     fclose($handle); 
    } 
    return $data; 
}