编程语言
首页 > 编程语言> > 使用PHP将单个列从CSV转换为简单数组

使用PHP将单个列从CSV转换为简单数组

作者:互联网

我有一个csv,它在单列中没有标题的电子邮件列表.

很简单,他们是这样的:

example@123.com
email@somewhere.com
helloworld@email.org

…等等

并且有30k.

我需要使用PHP将电子邮件列表转换为简单数组.

我了解fgetcsv()的概念,但是我们知道它一次读取一行,因此最终得到的是通过遍历csv而不是一个而得到的几个数组.

我需要这个:

Array
(
    [0] => example@123.com
    [1] => email@somewhere.com
    [2] => helloworld@email.org
)

我得到的是:

Array
(
    [0] => example@123.com
)

Array
(
    [0] => email@somewhere.com
)

Array
(
    [0] => helloworld@email.org
)

这是我的代码:

if (($file = fopen("emails.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($file)) !== FALSE) {
          // do stuff
    }

    echo '<pre>';
    print_r($data);
    echo '</pre>';
    echo '<br/>';   

    fclose($file);  
}

有没有一种简单的方法,可以使用PHP将整个CSV列简单地转换为数组?我一直在进行研究,但尚未找到解决方案.

解决方法:

如果文件中只有一列,则实际上不需要使用fgetcsv.您可以改用fgets函数(http://us2.php.net/manual/en/function.fgets.php).该函数返回一个字符串,您可以像这样轻松地将其添加到数组中:

$emails = array();
if (($file = fopen("emails.csv", "r")) !== FALSE) {
    while (($email = fgets($file)) !== FALSE) {
         $emails[] = $email;
    }
    fclose($file);  
}

或者,如果您坚持使用fgetcsv,则可以如下更改代码:

$emails = array();
if (($file = fopen("emails.csv", "r")) !== FALSE) {
    while (($arr = fgetcsv($file)) !== FALSE) {
         $emails[] = $arr[0];
    }
    fclose($file);  
}

最后,我已经阅读但没有经过自我测试,stream_get_line函数(http://www.php.net/manual/en/function.stream-get-line.php)甚至比fgets更快.您可以在上面替换它.

标签:fgetcsv,csv,arrays,php
来源: https://codeday.me/bug/20191029/1961979.html