从CSV文件中检索同一单元格内的多行

时间:2015-04-09 20:29:32

标签: php csv

我正在尝试从CSV文件中检索一些数据。我使用以下代码来完成CSV:

//create array for csv file
$array_data = array();
$row = 0;
if (($handle = fopen("import/pdf_data.csv", "r")) !== FALSE) {
    // read the CSV from root folder "web/interval/import"
    while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
        if ($row > 0) {
            $array_data[$row] = $data;
        }
        $row++;
    }
    fclose($handle);
}

//loop through all the feature data array
foreach ($array_data as $entry_value => $array_column) {
    foreach( $array_column as $value )
    {       
       //split data
       list($col1,$col2,$col3) = explode( ',', $value );

       echo "Name: ".$col1.", Surname: ".$col2.", Text: ".$col3."<br/>";

当我打印列时... col1和col2很好,因为它们的单元格中只有一个单独的值。 col3可能包含多行。比方说吧(参见下面col3的一个单元格):

col3
::::::::::::::
Text-a in line 1
Text-a in line 2
Text-a in line 3

如果一个单元格中有多行,则CSV输出将如下所示: “文本 - 第1行文本 - 第2行第2行 - a第3行”

并使用上面使用的代码打印第一行 “第1行中的文字 - 然后在新的条目第二行等等。

我想要实现的是以下格式

echo "Name: ".$col1.", Surname: ".$col2.", Text: ".$col3."<br/>";

当我得到这个时,哪个不适用于多行:

  • 姓名:测试,姓氏:测试2,文字:“第1行的文字 -
  • 姓名:,姓氏:,文字:第2行的文字 -

非常感谢任何建议,谢谢

2 个答案:

答案 0 :(得分:1)

CSV文件可能包含单元格中的多行值。但它需要用引号括起来。 Excel正确执行此操作 - 创建测试文件并保存为CSV。 PHP函数fgetcsv也可以正确读取这些文件。

示例文件:

"col1","col2","col3"
"test1","test2.1
test2.2
test2.3","test3"

第二行中的第二列包含多行值,这是一个完全有效的CSV文件。


这是正确的代码:

$array_data = array();
$row = 0;
if (($handle = fopen("import/pdf_data.csv", "r")) !== FALSE) {
    // read the CSV from root folder "web/interval/import"
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
        if ($row > 0) {
            $array_data[$row] = $data;
        }
        $row++;
    }
    fclose($handle);
}

//loop through all the feature data array
foreach ($array_data as $row) {
   list($col1,$col2,$col3) = $row;

   echo "Name: ".$col1.", Surname: ".$col2.", Text: ".$col3."<br/>";
}

答案 1 :(得分:0)

我可以通过另一个简单的解决方案给你建议。它正在使用fgets()explode()

$handle = fopen("inputfile.txt", "r");
$out = array();
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        $arr = explode(',' $line);
        $out[] = trim($arr[2]); // Supposing you want to get the third cell.
    }

    fclose($handle);
} else {
    // error opening the file.
}
print_r($out); 

参考How to read a file line by line in php