You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用while循环调用fgetcsv无法返回数组?

fgetcsv循环输出一串1的原因分析

问题重现

测试CSV内容:

First Name,Last Name
Ann,Bessire
Kimberly,Biggerstaff
Mary,Brice

单独调用fgetcsv时可正常提取数据:

$col_data = fgetcsv($csvfile);
print_r($col_data);
$col_data = fgetcsv($csvfile);
print_r($col_data);
$col_data = fgetcsv($csvfile);
print_r($col_data);
$col_data = fgetcsv($csvfile);
print_r($col_data);

输出结果:

Array ( [0] => First Name [1] => Last Name )
Array ( [0] => Ann [1] => Bessire )
Array ( [0] => Kimberly [1] => Biggerstaff )
Array ( [0] => Mary [1] => Brice )

但使用以下while循环时:

while ($col_data = fgetcsv($csvfile) !== false){
    print_r($col_data);
}

输出却是一串1:

1111111111111111111111111111111111

原因分析

这是PHP运算符优先级导致的问题。!==的优先级高于=,所以循环条件中的表达式会先执行fgetcsv($csvfile) !== false,得到布尔值true(PHP中布尔值true输出为1),再将这个布尔值赋值给$col_data。因此每次循环$col_data的值都是1,print_r会重复输出1;直到fgetcsv返回false时,false !== false得到false,赋值后循环才会终止,最终出现连续的1输出。

修正代码

给赋值表达式加上括号,确保先完成赋值操作,再进行判断:

while( ($col_data = fgetcsv($csvfile)) !== false ){
    print_r($col_data);
}

内容的提问来源于stack exchange,提问作者Larry Dayhoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:52:43