PHP处理CSV:实现精准匹配行及无匹配单次提示
问题解决方案
1. 实现名称/CAS号的精确匹配
你的代码当前是把整行内容拼接后做模糊匹配,导致名称会匹配到其他列中包含该字符串的行。要实现精确匹配,需要分别针对**名称列(第0列)和CAS号列(第1列)**做严格比对,而非整行模糊搜索:
- 针对名称:直接判断
$row[0]是否与搜索关键词严格相等 - 针对CAS号:直接判断
$row[1]是否与搜索关键词严格相等
2. 无匹配时仅输出一次提示
设置一个布尔变量作为匹配标志,循环过程中若找到匹配项则将标志设为true,循环结束后再根据标志判断是否输出无匹配提示,避免在循环内反复输出提示内容。
完整修正代码
<?php $ch = fopen("QHeTem2023.csv", "r"); $header_row = fgetcsv($ch); $searchfor = "1H-Indazole"; $found = false; // 匹配状态标志 while($row = fgetcsv($ch)) { // 精确匹配名称列或CAS号列 if ($row[0] === $searchfor || $row[1] === $searchfor) { echo '<div> CAS: ' . $row[1] . ' | ' . $row[2] . '</div>'; $found = true; // 找到匹配,更新标志 } } fclose($ch); // 释放文件资源 // 循环结束后统一处理无匹配场景 if (!$found) { echo "This reagent is not registered in our storage!"; } ?>
关键说明
- 用严格相等判断
===替代正则模糊匹配,确保只有名称或CAS号完全匹配的行才会被输出 - 通过
$found变量跟踪匹配状态,避免循环内重复输出无匹配提示 - 补充
fclose($ch)规范释放文件资源
内容的提问来源于stack exchange,提问作者Thiago
相关产品推荐
相关产品推荐

