无法转换为来自.csv文件的整数

我把一个.csv文件的数据放到一个数组中,但数字是string。 当我尝试将它们转换回整数时,它们变为0 。 我用来从.csv文件获取数据的代码:

 $reportData = []; $file = fopen('DailyReport.csv','r'); while(!feof($file)){ $reportData[] = fgetcsv($file,NULL,'|'); } 

我试图转换使用的数字:

 foreach($reportData as $res){ $int[] = intval($res[0]); //or $int[] = (int)$res[0]; //or even $int[] = $res[0]*1; 

没有任何作品,任何想法为什么?

$res[0]的值总是整数。 当我运行var_dump($res[0]); 结果是:

 string(15) "1437961" string(15) "1437971" string(15) "1438127" string(15) "1440392" string(15) "1440394" string(15) "1440399" string(15) "1440924" string(15) "1440986" 

和var_dump(bin2hex($ res [0]))返回:

 string(30) "003100340033003700390036003100" string(30) "003100340033003700390037003100" string(30) "003100340033003800310032003700" string(30) "003100340034003000330039003200" string(30) "003100340034003000330039003400" string(30) "003100340034003000330039003900" string(30) "003100340034003000390032003400" string(30) "003100340034003000390038003600" 

一种解决scheme是使用mbstring模块转换从CSV文件读取的string的编码。

首先阅读文件:

 $reportData = []; $file = fopen('DailyReport.csv', 'r'); while(!feof($file)) { $reportData[] = fgetcsv($file, NULL, '|'); } 

你的var_dump(bin2hex(...))输出表明DailyReport.csv是UTF-16BE。 (每个数字有两个字节, 前导字节始终为零, 尾随的零字节表示UTF-16LE。)

我们使用mbstring将这些大端的UTF-16string转换为UTF-8,然后转换为整数:

 foreach($reportData as $res) { $resUTF8 = mb_convert_encoding($res[0], 'UTF-8', 'UTF-16BE'); $resInt = intval($resUTF8); echo $resInt, PHP_EOL; // <- we have actual integers here } 

一个可能的缺点是, mbstring模块可能没有默认启用…或者,我们可以使用iconv ,但有时候可能有点反复无常。