首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用PHP和fgetcsv函数从CSV文件创建数组

如何使用PHP和fgetcsv函数从CSV文件创建数组
EN

Stack Overflow用户
提问于 2009-08-13 09:18:08
回答 15查看 323K关注 0票数 128

有没有人能提供一个使用fgetcsv从CSV文件创建数组的代码?

我使用下面的代码从一个简单的CSV文件创建了一个数组,但是当我的一个字段有多个逗号时,它就不能正常工作了--比如地址。

代码语言:javascript
复制
$lines =file('CSV Address.csv');

foreach($lines as $data)
{
list($name[],$address[],$status[])
= explode(',',$data);
}

*此外,我的托管服务不支持str_getcsv。

上面的代码不适用于下面的CSV文件示例。第一列是姓名,第二列是地址,第三列是婚姻状况。

代码语言:javascript
复制
Scott L. Aranda,"123 Main Street, Bethesda, Maryland 20816",Single
Todd D. Smith,"987 Elm Street, Alexandria, Virginia 22301",Single
Edward M. Grass,"123 Main Street, Bethesda, Maryland 20816",Married
Aaron G. Frantz,"987 Elm Street, Alexandria, Virginia 22301",Married
Ryan V. Turner,"123 Main Street, Bethesda, Maryland 20816",Single
EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2009-08-13 01:41:14

就像你在标题中所说的,fgetcsv是最好的选择。它非常容易使用。

代码语言:javascript
复制
$file = fopen('myCSVFile.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  //$line is an array of the csv elements
  print_r($line);
}
fclose($file);

您可能希望在其中放入更多的错误检查,以防fopen()失败,但这样做可以逐行读取CSV文件,并将该行解析为数组。

票数 211
EN

Stack Overflow用户

发布于 2009-08-13 02:20:15

我认为str_getcsv()语法要干净得多,它也不需要将CSV存储在文件系统中。

代码语言:javascript
复制
$csv = str_getcsv(file_get_contents('myCSVFile.csv'));

echo '<pre>';
print_r($csv);
echo '</pre>';

或者对于逐行解决方案:

代码语言:javascript
复制
$csv = array();
$lines = file('myCSVFile.csv', FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
}

echo '<pre>';
print_r($csv);
echo '</pre>';

或者对于没有str_getcsv()的逐行解决方案:

代码语言:javascript
复制
$csv = array();
$file = fopen('myCSVFile.csv', 'r');

while (($result = fgetcsv($file)) !== false)
{
    $csv[] = $result;
}

fclose($file);

echo '<pre>';
print_r($csv);
echo '</pre>';
票数 69
EN

Stack Overflow用户

发布于 2011-02-12 09:34:42

我已经创建了一个将csv字符串转换为数组的函数。该函数知道如何转义特殊字符,它可以使用或不使用封闭字符。

代码语言:javascript
复制
$dataArray = csvstring_to_array( file_get_contents('Address.csv'));

我用你的csv样本试过了,它的效果和预期的一样!

代码语言:javascript
复制
function csvstring_to_array($string, $separatorChar = ',', $enclosureChar = '"', $newlineChar = "\n") {
    // @author: Klemen Nagode
    $array = array();
    $size = strlen($string);
    $columnIndex = 0;
    $rowIndex = 0;
    $fieldValue="";
    $isEnclosured = false;
    for($i=0; $i<$size;$i++) {

        $char = $string{$i};
        $addChar = "";

        if($isEnclosured) {
            if($char==$enclosureChar) {

                if($i+1<$size && $string{$i+1}==$enclosureChar){
                    // escaped char
                    $addChar=$char;
                    $i++; // dont check next char
                }else{
                    $isEnclosured = false;
                }
            }else {
                $addChar=$char;
            }
        }else {
            if($char==$enclosureChar) {
                $isEnclosured = true;
            }else {

                if($char==$separatorChar) {

                    $array[$rowIndex][$columnIndex] = $fieldValue;
                    $fieldValue="";

                    $columnIndex++;
                }elseif($char==$newlineChar) {
                    echo $char;
                    $array[$rowIndex][$columnIndex] = $fieldValue;
                    $fieldValue="";
                    $columnIndex=0;
                    $rowIndex++;
                }else {
                    $addChar=$char;
                }
            }
        }
        if($addChar!=""){
            $fieldValue.=$addChar;

        }
    }

    if($fieldValue) { // save last field
        $array[$rowIndex][$columnIndex] = $fieldValue;
    }
    return $array;
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1269562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档