如何按列分隔csv数组?

时间:2018-03-06 05:37:57

标签: php arrays csv foreach

我在Excel中有一个巨大的列表,它们只是两列

name    type

目前正在阅读该文件:

$lines = array_map('str_getcsv', file('file.csv', FILE_IGNORE_NEW_LINES));

print_r($lines);返回:

   name1;type
   name2;type2
   ...

Array ( [0] => Array ( [0] => name1;type1) [1] => Array ( [0] => name2;type2)...

我想在foreach中访问单独的名称和类型

我该怎么做? 感谢

2 个答案:

答案 0 :(得分:2)

str_getcsv默认分隔符为','因此您需要以某种方式调用它,并明确指定';'作为分隔符

例如像这样

$myGetCsv = function ($str) {
    return str_getcsv($str, ';');
};

$lines = array_map($myGetCsv, file('file.csv', FILE_IGNORE_NEW_LINES));

答案 1 :(得分:0)

使用此代码进行CSV文件读取。它易于使用并了解其工作原理。

if (($handle = fopen('./suppression_invalid_emails.csv', "r")) !== false) {
     //getting column name
     $column_headers = fgetcsv($handle);
     foreach ($column_headers as $header) {
        //column as array;
          $result[$header] = array();
     }
     // get data for column;
     while (($data = fgetcsv($handle)) !== false) {
          $i = 0;
          foreach ($result as &$column) {
               $column[] = $data[$i++];
          }
     }
     fclose($handle);
    echo '<pre>'; print_r($result); echo '</pre>';
}

我使用两个基本功能,第一个是fopen用于读取文件,另一个用fgetcsv用于获取列数据。

结果是:

Array
(
    [reason] => Array
        (
            [0] => Mail domain mentioned in email address is unknown
            [1] => Known bad domain
            [2] => Known bad domain
        )

    [email] => Array
        (
            [0] => muneque@collegeclub.om
            [1] => saharfa2000@hatmail.com
            [2] => tawheeda81@yahoo.co
        )

    [created] => Array
        (
            [0] => 1502644294
            [1] => 1502480171
            [2] => 1502344320
        )

)