Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CSV解析返回一个空数组_Php_Parsing_Csv - Fatal编程技术网

Php CSV解析返回一个空数组

Php CSV解析返回一个空数组,php,parsing,csv,Php,Parsing,Csv,我有一个超级简单的CSV文件(大约500行,14.5k),我需要将其放入一个数组中,稍后我需要对照其他数据集检查ID列 CSV是这样的: id,mail,Plan 102,,Plan_Pay 1028,,Plan_Pay 1031,,Plan_Prom 1032,,Plan_Pay 1033,,Plan_Pay 1034,xxxxxx@gmail.com,Plan_Free 1035,xxxxxx@gmail.com,Plan_Free 1036,xxxxxx@gmail.com,Plan_Pa

我有一个超级简单的CSV文件(大约500行,14.5k),我需要将其放入一个数组中,稍后我需要对照其他数据集检查ID列

CSV是这样的:

id,mail,Plan
102,,Plan_Pay
1028,,Plan_Pay
1031,,Plan_Prom
1032,,Plan_Pay
1033,,Plan_Pay
1034,xxxxxx@gmail.com,Plan_Free
1035,xxxxxx@gmail.com,Plan_Free
1036,xxxxxx@gmail.com,Plan_Pay
1079,,Plan_Prom
109,,Plan_Pay
1166,xxxxxx@elid.com,Plan_Prom
12,xxxxxx@gmail.com,Plan_Pay
....
....
(on and on .. about 500 lines)
但不管我如何解析它,我得到一个空数组

我试过用lib

还有变种

$csv = new parseCSV('id2.csv');
print_r($csv->data);// results empty
我也尝试过(从php.net):

我尝试了所有路径组合,相对(
“id2.csv”
),绝对(
)http://path.to/id2.csv“
)等,但结果都一样

我的问题是:文件本身是否有问题?*。CSV是如此简单的格式,我有一个非常小的文件(大约500行)。 这可能是编码问题(它是没有bom的UTF-8)。或者可能是服务器问题?还是我只是做错了??(到目前为止,任何地方都没有可见的错误)

注意:如果PHP在读取Macintosh计算机上或由Macintosh计算机创建的文件时无法正确识别行尾,启用自动检测行尾运行时配置选项可能有助于解决此问题

如果您已经设置了
自动检测\u行\u结尾
,这里有一个更简单的方法来读取csv

$csv = new SplFileObject("id2.csv", "r");
$csv->setFlags(SplFileObject::READ_CSV);
foreach($csv as $row) {
    list($id,$mail,$plan) = $row;
    // You your stuff
}

我不想说显而易见的事情,但是。。。你真的有权读取你试图打开的文件吗?@Filipos Karapetis,我想我有。它是本地计算机(xampp)上的本地主机服务器。从来没有这样的问题。另外,如果文件不存在,我有一个'if(!file_exists($filename)| |!is _readable($filename))`语句-或者它可能不好用enoug?
echo$csvf
不检查文件/路径是否存在…@Shomz-不,它不检查,但是
如果(!file_exists($filename)| |!是否可读($filename))
会(或应该)@ObmerkKronen这样更好。我不相信这是问题所在。如果这是OP代码的问题,他/她将得到一个只有一个条目的数组,其中包含一个巨大的文本块。。。然而,OP得到的是一个完全空的array@Baba嗯……:-)既然你已经救了我好几次,我倾向于相信你:-)。但是我得到了这个错误:
Uncaught异常“RuntimeException”,带有消息“SplFileObject::u构造(id2.csv)
。。(另外,我不知道是否相关,但它不是Mac文件-它是从WIN7上的Open Office导出的)@ObmerkKronen你是说该文件根本不被读取吗?如果是,请验证您的
.csv
是小写字母还是
.csv
大写字母…@baba-是小写字母。您的脚本实际上正在运行IMHO-因为输出错误需要很长时间。。它不是即时的(大约45秒)。所以我想它会做点什么。45秒?档案有多大?你有没有运行xdebug?
  if ( !function_exists('fgetcsv') ) echo 'Server too old ... we need to check.';// but it is ok

    function csv_to_array($filename, $delimiter=',')
    {
        if(!file_exists($filename) || !is_readable($filename)){
         $data = array();
        $data[] = 'no file'; // debug -verify there is file..
        // echo 'no file'; // debug -verify there is file..
        // return FALSE;
    }
        $header = NULL;
        $data = array();
        if (($handle = fopen($filename, 'r')) !== FALSE)
        {
            while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
            {
                if(!$header)
                    $header = $row;
                else
                    $data[] = array_combine($header, $row);
            }
            fclose($handle);
        }
        return $data;
    }

    $csv = csv_to_array($csvf);
    echo $csvf; // debug verify correct path
    print_r($csv);// results empty
$csv = new SplFileObject("id2.csv", "r");
$csv->setFlags(SplFileObject::READ_CSV);
foreach($csv as $row) {
    list($id,$mail,$plan) = $row;
    // You your stuff
}