PHP阅读csv,双引号问题

用户名

我有一个csv文件,其中包含6行,如下所示:

10264,dan,Dan,37519,MILLER,6/3/2014 14:51,$28.40,Rapid,[email protected],,
10443,Dari,"D. R, LLC",37308,SELLERS,6/2/2014 15:12,$40.00,esponse,[email protected],,
10488,EmHern,"A HOME FOR YOU,LLC",37749,MILLER,6/1/2014 8:23,$33.00, Response,[email protected],,

我试图读取该csv并提取一些列,然后向提取的每个列添加管道定界符,这是我使用的功能:

<?php
function fncReadCSV($csvFileName){
    $result = array();
    $row = 1;
    if (($handle = fopen($csvFileName, "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                $outPut = "";
                $outPut .= $data[0];
                $outPut .="|";
                $outPut .= $data[1];
                $outPut .="|";  
                $outPut .= $data[2];
                $outPut .="|";  
                $outPut .= $data[6];
                $outPut .="|";  
                $outPut .= $data[8];
                $outPut .="|";                                  
                array_push($result, rtrim($outPut, "|"));
                $row++;
            }               
           }
    fclose($handle);
    return $result;
    }
echo "<pre>";
print_r(fncReadCSV("file.csv"));
echo "</pre>";

我得到的结果仅对第一行是正确的,对于第二,第三行,我得到的是csv中的完整行,我期望引号会破坏我的代码,如何使用有效的代码解决该问题对于带引号的csv文件和没有请的csv文件?

结果是:

Array
(
    [0] => 10264|dan|Dan|$28.40|[email protected]
    [1] => 10443,Dari,"D. R, LLC",37308,SELLERS,6/2/2014 15:12,$40.00,esponse,[email protected],,
    [2] => 10488,EmHern,"A HOME FOR YOU,LLC",37749,MILLER,6/1/2014 8:23,$33.00, Response,[email protected],,
)

我期望的结果是:

Array
    (
        [0] => 10264|dan|Dan|$28.40|[email protected]
        [1] => 10443|Dari|"D. R, LLC"|esponse|[email protected]
        [2] => 10488|EmHern|"A HOME FOR YOU,LLC"|37749|[email protected]
    )
凤凰艺术

fgetcsv()应该处理单引号,事实上fputcsv()的默认输出是引用(换行)其中带有空格的任何行。完全希望用定界符在字符串周围包含“”,即“单词,其他单词”,这对于fgetscsv可以100%罚款。

尝试这个

echo '<pre>';
    if (($handle = fopen($csvFileName, "r")) !== FALSE) {
        while (false !== ($data = fgetcsv($handle, 1024))) {
print_r($data);
            $data_row = array(
                $data[0],
                $data[1],
                $data[2],
                $data[6],
                $data[8]
            );                            
           $result[] = implode("|", $data_row);
           $row++;
        }               
    }
        fclose($handle);
        return $result;

内爆比较干净,您将不需要修剪多余的“ |” ?,因为无论如何我都没看到目的,为什么不省略最后一个(最右边)|。

   $outPut .="|";                                  
   array_push($result, rtrim($outPut, "|"));


   array_push($result, $outPut));

实际上,运行您的确切代码会为我提供此输出?

$result = array();
        $row = 1;
        if (($handle = fopen(__DIR__.'/test.csv', "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                $outPut = "";
                $outPut .= $data[0];
                $outPut .="|";
                $outPut .= $data[1];
                $outPut .="|";
                $outPut .= $data[2];
                $outPut .="|";
                $outPut .= $data[6];
                $outPut .="|";
                $outPut .= $data[8];
                $outPut .="|";
                array_push($result, rtrim($outPut, "|"));
                $row++;
            }
        }
        fclose($handle);

array(
'0' => '10264|dan|Dan|$28.40|[email protected]',
'1' => '10443|Dari|D. R, LLC|$40.00|[email protected]',
'2' => '10488|EmHern|A HOME FOR YOU,LLC|$33.00|[email protected]'
)

运行我的代码给了我

array(
'0' => '10264|dan|Dan|$28.40|[email protected]',
'1' => '10443|Dari|D. R, LLC|$40.00|[email protected]',
'2' => '10488|EmHern|A HOME FOR YOU,LLC|$33.00|[email protected]'
)

这是你的解决方案

echo "<pre>";
$result = array();
        $row = 1;
        if (($handle = fopen(__DIR__.'/test.csv', "r")) !== FALSE) {
            while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                if(count($data) == 1){
                    $f = fopen('php://temp', 'w');
                    fwrite($f, $data[0]);
                    rewind($f);
                    $data = fgetcsv($f, 1000, ",");
                    fclose($f);
                }

                $data_row = array(
                    $data[0],
                    $data[1],
                    $data[2],
                    $data[6],
                    $data[8]
                 );                            
                $result[] = implode("|", $data_row);
                $row++;
            }
        }
        var_export($result);
        fclose($handle);

输出

array(
'0' => '10264|dan|Dan|$28.40|[email protected]',
'1' => '10443|Dari|D. R, LLC|$40.00|[email protected]',
'2' => '10488|EmHern|A HOME FOR YOU,LLC|$33.00|[email protected]'
)

爆炸

由于外引号“,getcsv返回单个元素,但是它在“ D”周围去除了一组引号。R,LLC”位(女巫给我们提供了与第1行类似的字符串),然后检查该单个元素,并将其写入临时缓冲区((流包装器)),并使用固定的fgetcsv和voila重新处理该流!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

问题与PHP中的单双引号

来自分类Dev

PHP双引号字符串问题

来自分类Dev

使用lumenwork csv阅读器阅读带有双引号的csv

来自分类Dev

PHP单引号与双引号

来自分类Dev

如何在PHP中正确编码json(双引号问题)

来自分类Dev

使用csv阅读器在文本文件中保留双引号

来自分类Dev

CSV阅读器从第一个字段中删除双引号

来自分类Dev

导入的CSV中的双引号

来自分类Dev

在 .csv 中转义双引号

来自分类Dev

阅读日志时,JSON从双引号变为单引号

来自分类Dev

PHP:回显字符串中的单引号和双引号问题?

来自分类Dev

PHP的json_decode具有单引号而不是双引号的问题

来自分类Dev

字段双引号php postgresql

来自分类Dev

用双引号替换单引号php

来自分类Dev

在csv文件问题的每一列中添加双引号的脚本

来自分类Dev

bash脚本中的双引号问题

来自分类Dev

双引号和fread函数问题

来自分类Dev

访问excel vba双引号问题

来自分类Dev

SSH 命令:如何绕过双引号问题?

来自分类Dev

Linq 动态存在双引号问题

来自分类Dev

带有随机双引号的CSV文件

来自分类Dev

写入不带双引号的CSV文件

来自分类Dev

LPTHW:CSV.writer周围的双引号

来自分类Dev

无法读取带双引号的csv

来自分类Dev

Python CSV Reader不会忽略双引号

来自分类Dev

存储在CSV中的双引号值分配?

来自分类Dev

如何忽略CSV文件中的双引号?

来自分类Dev

如何使用php解析CSV,但忽略字符串中的逗号和双引号

来自分类Dev

单引号和双引号使用data.replace的问题