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

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

有人可以使用fgetcsv提供从CSV文件创建数组的代码吗?


我使用以下代码从一个简单的CSV文件创建一个数组,但是当我的一个字段有多个逗号(例如地址)时,它无法正常工作。


$lines =file('CSV Address.csv');


foreach($lines as $data)

{

list($name[],$address[],$status[])

= explode(',',$data);

}

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


以上代码不适用于以下CSV文件示例。第一列是名称,第二列是地址,第三列是婚姻状态。


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


一只萌萌小番薯
浏览 484回答 3
3回答

至尊宝的传说

就像你在标题中所说,fgetcsv是要走的路。它非常易于使用。$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文件并将该行解析为数组。

哈士奇WWW

我创建了一个将csv字符串转换为数组的函数。该函数知道如何转义特殊字符,它可以使用或不使用机箱字符。$dataArray&nbsp;=&nbsp;csvstring_to_array(&nbsp;file_get_contents('Address.csv'));我用你的csv样本尝试了它,它按预期工作!function&nbsp;csvstring_to_array($string,&nbsp;$separatorChar&nbsp;=&nbsp;',',&nbsp;$enclosureChar&nbsp;=&nbsp;'"',&nbsp;$newlineChar&nbsp;=&nbsp;"\n")&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;@author:&nbsp;Klemen&nbsp;Nagode &nbsp;&nbsp;&nbsp;&nbsp;$array&nbsp;=&nbsp;array(); &nbsp;&nbsp;&nbsp;&nbsp;$size&nbsp;=&nbsp;strlen($string); &nbsp;&nbsp;&nbsp;&nbsp;$columnIndex&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;$rowIndex&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;$fieldValue=""; &nbsp;&nbsp;&nbsp;&nbsp;$isEnclosured&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;for($i=0;&nbsp;$i<$size;$i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$char&nbsp;=&nbsp;$string{$i}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$addChar&nbsp;=&nbsp;""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($isEnclosured)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($char==$enclosureChar)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($i+1<$size&nbsp;&&&nbsp;$string{$i+1}==$enclosureChar){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;escaped&nbsp;char &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$addChar=$char; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$i++;&nbsp;//&nbsp;dont&nbsp;check&nbsp;next&nbsp;char &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$isEnclosured&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$addChar=$char; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($char==$enclosureChar)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$isEnclosured&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($char==$separatorChar)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$array[$rowIndex][$columnIndex]&nbsp;=&nbsp;$fieldValue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fieldValue=""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$columnIndex++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}elseif($char==$newlineChar)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$char; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$array[$rowIndex][$columnIndex]&nbsp;=&nbsp;$fieldValue; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fieldValue=""; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$columnIndex=0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$rowIndex++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$addChar=$char; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($addChar!=""){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fieldValue.=$addChar; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if($fieldValue)&nbsp;{&nbsp;//&nbsp;save&nbsp;last&nbsp;field &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$array[$rowIndex][$columnIndex]&nbsp;=&nbsp;$fieldValue; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$array;}

HUX布斯

如果您希望每一行都在一个数组中,并且每行中的每个单元格都在数组中:$file = fopen('csvFile.csv', 'r');&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Open the file&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while (($line = fgetcsv($file)) !== FALSE) {&nbsp; &nbsp; // Read one line&nbsp; &nbsp; $array[] =$line;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Add the line in the main array}echo '<pre>';print_r($array);&nbsp; &nbsp;//print it outecho '</pre>';&nbsp;fclose($file);
打开App,查看更多内容
随时随地看视频慕课网APP