在PHP中使用fgetcsv保持前导零

在PHP中使用fgetcsv保持前导零,php,csv,Php,Csv,我正在读取一个.csv文件(我无法控制该文件的格式),并试图在生成的数组中保留数据的前导零。例如,.csv文件的字段中有“0615”,但生成的数组包含“615”。.csv文件中还有一些字段不包含前导零,因此将零添加到每个字段的开头将不起作用 我试图强制函数以字符串形式读取字段,但explode、str_getcsv、fgetcsv都将其解析为整数,并预先删除前导零。有什么想法吗 编辑:分解不会删除前导零。将explode与fgets一起使用是可行的。用于将前导零添加到解析的整数中,无论您需要它在

我正在读取一个.csv文件(我无法控制该文件的格式),并试图在生成的数组中保留数据的前导零。例如,.csv文件的字段中有“0615”,但生成的数组包含“615”。.csv文件中还有一些字段不包含前导零,因此将零添加到每个字段的开头将不起作用

我试图强制函数以字符串形式读取字段,但explode、str_getcsv、fgetcsv都将其解析为整数,并预先删除前导零。有什么想法吗

编辑:分解不会删除前导零。将explode与fgets一起使用是可行的。

用于将前导零添加到解析的整数中,无论您需要它在哪里


或者使用,如果你熟悉的话

$num = 1;
$num = sprintf('%04d', $num);
//               ^^
//               ||_ How many leading digits?
//               |_ Leading digit?
// output: 0001

如果表示或统一格式过程需要前导零,那么在输出数字时只需填充数字可能会更容易

在这里应该有帮助

explode()
以字符串为基础工作;您的类型转换必须在其他位置进行:

$data = "00555,00666,00777,00888";
$a = explode(",",$data);
foreach($a as $b) echo $b . " ";         // 00555 00666 00777 00888

如果PHP坚持将字符串解释为整数,请使用
(string)$b

问题是,除了查看原始的.csv数据外,无法确定何时需要前导数字,该数据在解析字段后无法执行。@user978887在执行分解之前,您不能执行
预替换
,因此,您可以添加一个特殊字符来代替
0
,然后将其替换回
0
?最终导致.csv文件出现问题,但此解决方案使用的是我在意识到问题之前测试的一些数据。谢谢。这些数字实际上被发送到一个数据库,这个字段代表一个唯一的值。我需要0615不同于615和00615。你是对的。.csv文件有问题,我假设explode删除了前导零。谢谢小心使用
分解
——它不知道引用的逗号。如果您的某个值可能是“XYZ,Inc.”之类的值,这将爆炸。我根本没有这种行为,
str_getcsv(“001002”)
为我保留前导零。您使用的PHP版本是什么?