为csv文件创建带有键值对的php数组

时间:2013-06-20 10:28:26

标签: php arrays

我在控制器操作中导入了一个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爆炸获取行数据。问题是将密钥设置为标题。 任何人都可以为此帮助我。

2 个答案:

答案 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]);
 }