我在控制器操作中导入了一个csv文件。 csv文件的结构如下所示。
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爆炸获取行数据。问题是将密钥设置为标题。 任何人都可以为此帮助我。
答案 0 :(得分: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;
}
答案 1 :(得分: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]);
}