我有两个非常小的CSV文件,我想加载到数组中并比较每一行及其各个单元格,如果任何单元格中有更改,请高亮显示它。
目前我正在编写一个脚本来加载文件并将它们显示在浏览器上,因为它们出现在文件中。
CSV结构:
我的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);
}
?>
浏览器结果:
不确定为什么Array的结构如上图所示,因为我理解fgetcsv()
逐行读取。
任何人都可以看到我在代码中的份额......?
答案 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,而不是之后:
拥有此修复程序如何比较这两个文件之间的值..?