无法转换为来自.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 ,但有时候可能有点反复无常。