Php fgetcsv未正确读取linux系统中保存的csv文件

Php fgetcsv未正确读取linux系统中保存的csv文件,php,linux,codeigniter,csv,Php,Linux,Codeigniter,Csv,我正试图通过csv文件将一些数据导入我的数据库。问题是,在开发的一开始,我使用的是windows,所以我的csv文件是在ms office上编写的。因此,在那里导入时,效果很好。但是在保存csv文件的同时切换到linux(UBUNTU)并没有按照我的要求显示数据。我也没有得到任何解决办法 这是由MSOffice在windows机器上制作的csv生成的数组,该机器工作正常 Array ( [0] => Array ( [0] => Student Name

我正试图通过csv文件将一些数据导入我的数据库。问题是,在开发的一开始,我使用的是windows,所以我的csv文件是在ms office上编写的。因此,在那里导入时,效果很好。但是在保存csv文件的同时切换到linux(UBUNTU)并没有按照我的要求显示数据。我也没有得到任何解决办法

这是由MSOffice在windows机器上制作的csv生成的数组,该机器工作正常

Array
(
[0] => Array
    (
        [0] => Student Name
        [1] => Student Roll
        [2] => Class
        [3] => Section
        [4] => Exam
        [5] => Subject
        [6] => Total Marks
        [7] => Grade
        [8] => Objective
        [9] => Subjective
        [10] => Practical
    )

[1] => Array
    (
        [0] => Sample Name
        [1] => 123
        [2] => Nine
        [3] => A
        [4] => Mid Term
        [5] => Math
        [6] => 80
        [7] => A+
        [8] => 40
        [9] => 20
        [10] => 20
    )

)
但是在linux中,我的csv格式无法正常工作。它将所有数据推入一个键&一个元素,如下所示

Array
(
[0] => Array
    (
        [0] => Student Name Student Roll    Class   Section Exam    Subject Total Marks Grade   Objective   Subjective  Practical
    )

[1] => Array
    (
        [0] => Samp0le Name 123 Nine    A   Mid Term    Math    80  A+  40  20  20
    )

)
所以我真正的问题是,我怎样才能理解它

这是我对上一代阵列的编码:

$csv = array();
    //$file = fopen('myCSVFile.csv', 'r');
    ini_set("auto_detect_line_endings", true);
    while (($result = fgetcsv($fp)) !== false)
    {
        $csv[] = $result;
    }

    fclose($fp);

    echo '<pre>';
    print_r($csv);
    echo '</pre>';
$csv=array();
//$file=fopen('myCSVFile.csv','r');
ini设置(“自动检测线结束”,真);
while(($result=fgetcsv($fp))!==false)
{
$csv[]=$result;
}
fclose($fp);
回声';
打印(csv);
回声';

请帮帮我实际上我很需要

您已使用tab而不是
逗号将文件保存为-
单独的值。
再次
另存为
同一文件,选择
逗号
作为值分隔符
,选择
双引号
作为值分隔符。

尝试此操作

$file=“FNAC_biothes.csv”;
$handle=fopen($file,“r”);
$row=1;
while(($data=fgetcsv($handle,0,“;”,“”))!==FALSE)
{
如果($row==1)
{
//跳过第一行
}
其他的
{
回声“;
打印(数据);
}
$row++;
}

fgetcsv()
在要保存到csv文件的分隔符中的第三个参数中。例如:逗号、分号等

在代码中没有fopen()语句(注释掉),因此fgetcsv($fp)将为空。以防其他人注意到:)@NeilMasters我已经在代码中这样做了。上部阵列正在完美生成。但事实是基于windows和linux的csv文件。我不知道问题出在哪里,但我想解决这个问题。我认为这不是问题所在。您可以看到该阵列打印良好。在基于ms office的csv文件上,它工作正常,但在基于linux的csv文件上,它将此问题置于较低的数组中。根据打印的数组,似乎字段分隔符被设置为{tab}而不是commaI。我不知道您是否理解我的问题。我需要相同的结果意味着我需要第二个数组看起来像第一个数组。第二个数组是由linux环境中生成的csv生成的。做一件事,用gedit、sublime等打开csv文件,然后检查值是否用逗号(,)或tab{tab}分隔。我已经完成了。谢谢你的帮助。你的想法也是正确的。我刚刚把标签设为第一行双引号的分隔符,效果很好。谢谢你最后的评论。它只是解决了我的整个问题。:)
$file = "FNAC_SPECTACLES.csv";
$handle = fopen($file, "r");
$row = 1;
while (($data = fgetcsv($handle, 0, ";","'")) !== FALSE) 
{
    if($row == 1)
    {
        // skip the first row   
    }
    else
    {
        echo "<pre>";
        print_r($data);
    }
    $row++;
}