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

2022-08-30 06:55:23

有人可以提供一个代码来使用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

答案 1

就像你在标题中说的,fgetcsv是要走的路。它非常易于使用。

$file = fopen('myCSVFile.csv', 'r');
while (($line = fgetcsv($file)) !== FALSE) {
  //$line is an array of the csv elements
  print_r($line);
}
fclose($file);

您需要在那里放置更多的错误检查以防万一失败,但这可以逐行读取CSV文件并将行解析为数组。fopen()


答案 2

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

$csv = str_getcsv(file_get_contents('myCSVFile.csv'));

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

或者对于逐行解决方案:

$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() 的逐行解决方案:

$csv = array();
$file = fopen('myCSVFile.csv', 'r');

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

fclose($file);

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