我正在努力解决以下问题。
用户上传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标题很好,相信我,我已经三次检查了。
我在这里失踪了什么?
答案 0 :(得分:1)
虽然提供CSV文件会有所帮助,但并非总是如此。文件中的标题行可能包含一些不可见的字符。我敢打赌它是UTF-8 Byte Orde Mark - https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
在二进制编辑器中打开文件,检查前三个字节是否确实符合您的预期。如果是UTF-8签名,请在进入fgetcsv之前将其剥离。