在PHP中,比较CSV文件的第一行与字符串始终为第一个值

时间:2017-09-15 13:32:32

标签: php csv

我正在努力解决以下问题。 用户上传CSV文件后,我想比较CSV文件的标题与内容和订单的匹配。 我尝试了几种PHP方法,我的字符串上的第一个值总是有一个FALSE结果。 所以我基本上使用explode()创建一个控制字符串,然后获取我的CSV的第一行。

CSV文件

value1,value2,value3
My First Value,My Second Value,My Third Value

代码

$controlHeader = explode(',',"value1,value2,value3");
$csvHeader = fgetcsv($file_handle, 2000, ',');

foreach($csvHeader as $key => $header){
    if (strpos($controlHeader[$key],$header) === false){
        echo('false');
        } else {
        echo 'true';
        }
}

为什么我的CSV行中的第一个值总是被认为与控件不同? 我也尝试array_diff()它总是报告key [0]不同。 当然,我的CSV标题很好,相信我,我已经三次检查了。 我在这里失踪了什么?

1 个答案:

答案 0 :(得分:1)

虽然提供CSV文件会有所帮助,但并非总是如此。文件中的标题行可能包含一些不可见的字符。我敢打赌它是UTF-8 Byte Orde Mark - https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8

在二进制编辑器中打开文件,检查前三个字节是否确实符合您的预期。如果是UTF-8签名,请在进入fgetcsv之前将其剥离。