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

标签 php excel csv

我将 .csv 文件中的数据放入数组中,但数字以字符串形式出现。当我尝试将它们转换回整数时,它们变为 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"

最佳答案

一种解决方案是使用 mbstring 转换从 CSV 文件读取的字符串的编码。模块。

首先读取文件:

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

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

让我们使用 mbstring 将这些大端 UTF-16 字符串转换为 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 ,但有时可能有点反复无常。

关于php - 无法转换为来自 .csv 文件的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32999061/

相关文章:

python - 如何解析python输入文件

php - Laravel:如何获取选择(下拉列表)的值以与模型绑定(bind)?

php - 更改 <td> 的背景而不向 <td> 添加类

php - 我的填充不起作用

excel - 附加任何匹配的单元格值

python - 将 RDD 写入带有拆分列的 csv

php - CakePHP:使用不同的数据库关联两个模型?

Excel 数据透视表排除某些列总计

设计excel文件的java android错误

java.lang.NoClassDefFoundError : org/apache/commons/lang3/ObjectUtils 错误