PHP中!in_array()判断CSV文件时返回false的问题排查
问题根源
你的代码里$file变量最终的值是test.csv,而你用in_array($file, ['materials', 'products'])判断时,test.csv显然不在目标数组里,所以!in_array()的结果为true,触发return false导致代码终止。
解决方案
根据你的实际需求,分两种场景处理:
场景1:验证CSV内容是否包含指定值
如果你的目标是检查生成的CSV里的内容是否为materials或products,应该读取CSV内容后再判断,而非检查文件名:
// 写完CSV后务必关闭文件 fclose($testCsvFile); // 读取CSV内容并整理 $csvValues = []; $handle = fopen("test.csv", "r"); while (($row = fgetcsv($handle)) !== FALSE) { $csvValues = array_merge($csvValues, $row); } fclose($handle); // 检查内容是否包含目标值 $containsTarget = !empty(array_intersect($csvValues, ['materials', 'products'])); if (!$containsTarget) { return false; }
场景2:验证文件名(无后缀)是否匹配指定值
如果你的目标是确保文件名是materials或products(比如文件应为materials.csv或products.csv),需要提取文件名的无后缀部分再判断:
$file = basename($getFile); // 提取不带后缀的文件名 $fileNameNoExt = pathinfo($file, PATHINFO_FILENAME); if (!in_array($fileNameNoExt, ['materials', 'products'])) { return false; }
额外提示:代码中unset($parsed_data[0]);里的$parsed_data变量未定义,会触发Notice级错误,建议提前声明变量或移除无用代码。
内容的提问来源于stack exchange,提问作者liliget
相关产品推荐
相关产品推荐

