0

我在控制器操作中导入了一个 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 explode 获取行数据。问题在于将密钥设置为给定的标题。任何人都可以帮我解决这个问题。

4

2 回答 2

4

爆炸可能很危险 - 如果任何地址中有逗号,则该行将变为无效。我建议改用原生函数str_getcsv()

这是为 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;
}
于 2013-06-20T10:37:21.030 回答
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]);
 }
于 2013-06-20T10:35:05.323 回答