读取并加载两个CSV文件

时间:2014-06-17 20:26:16

标签: php csv

我有两个非常小的CSV文件,我想加载到数组中并比较每一行及其各个单元格,如果任何单元格中有更改,请高亮显示它。

目前我正在编写一个脚本来加载文件并将它们显示在浏览器上,因为它们出现在文件中。

CSV结构:

enter image description here

我的PHP代码:

<?php
$row = 1;
$row2 = 1;
if (($file = fopen("Workbook1.csv", "r")) !== FALSE && ($file2 = fopen("Workbook2.csv", "r")) !== FALSE ) {

    while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {

        $num = count($data);
        echo "<p> $num fields in line $row Orginal File: <br /></p>\n";
        $row++;

        for ($i=0; $i < $num; $i++) {
            echo $data[$i] . "<br />\n";
        }

    while(($data2 = fgetcsv($file2, 1000 , ",")) !== FALSE){

        $num2 = count($data2);
        echo "<p> $num2 fields in line $row2 Updated File: <br /></p>\n";
        $row2++;

        for ($x=0; $x < $num2; $x++) {
            echo $data2[$x] . "<br />\n";
        }

    }

    }
    fclose($file);
    fclose($file2);
}

?>

浏览器结果:

enter image description here

不确定为什么Array的结构如上图所示,因为我理解fgetcsv()逐行读取。

任何人都可以看到我在代码中的份额......?

2 个答案:

答案 0 :(得分:0)

您没有在正确的位置关闭第一个while循环。

试试这个

<?php
$row = 1;
$row2 = 1;

if (($file = fopen("Workbook1.csv", "r")) !== FALSE && ($file2 = fopen("Workbook2.csv", "r")) !== FALSE ) {

    while (($data = fgetcsv($file, 1000, ",")) !== FALSE) {

        $num = count($data);
        echo "<p> $num fields in line $row Orginal File: <br /></p>\n";
        $row++;

        for ($i=0; $i < $num; $i++) {
            echo $data[$i] . "<br />\n";
        }
    } // end first while loop

    while(($data2 = fgetcsv($file2, 1000 , ",")) !== FALSE){

        $num2 = count($data2);
        echo "<p> $num2 fields in line $row2 Updated File: <br /></p>\n";
        $row2++;

        for ($x=0; $x < $num2; $x++) {
            echo $data2[$x] . "<br />\n";
        }

    }

    fclose($file);
    fclose($file2);
}

?>

答案 1 :(得分:0)

阅读此enter link description here

我设法通过在fopen()

之前在文件顶部添加这行代码来修复它
  

的ini_set( 'auto_detect_line_endings',TRUE);

     

如果您需要设置auto_detect_line_endings来处理Mac线路   结局,看似显而易见但要记住它应该在之前设定   fopen,而不是之后:

拥有此修复程序如何比较这两个文件之间的值..?