为何使用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
相关产品推荐
相关产品推荐

