仅显示完全匹配的行(CSV 与 PHP),并且在不匹配的情况下仅循环一次消息

Showing only the rows for the exact match (CSV with PHP) and having a message just once for a while loop in case of no match

提问人:Thiago 提问时间:2/10/2023 更新时间:2/10/2023 访问量:27

问:

我有一个包含三列(名称、CAS 编号和存储)的 CSV 文件,如此处所示的 CSV 文件。我一直在尝试搜索特定的试剂名称或 CAS 编号,并且只显示第 1 行和第 2 行。它正在工作,但是当搜索也是其他试剂名称一部分的名称时,它会显示所有匹配项,而不是仅显示确切搜索单词的特定结果。

例如,在搜索“1H-吲唑”时,显示为:

CAS: 271-44-3 |Rotavap 机柜,隔间 AM-134

CAS: 40598-94-5 |冷冻室 - 小烧瓶,隔间 AM-176

CAS:53857-57-1 |Rotavap 机柜,隔间 AM-177

我只想看到第一个“CAS:271-44-3 |Rotavap 柜,隔间 AM-134“,用于”1H-吲唑”。对于“$searchfor = ”271-44-3“;”,它就像一个魅力!

$ch = fopen("QHeTem2023.csv", "r");
$header_row = fgetcsv($ch);
$searchfor = "1H-Indazole";
$pattern = preg_quote($searchfor, '/');
$pattern = "/^.*$pattern.*$/mi";
while($row = fgetcsv($ch)) {
if (preg_match($pattern, implode('', $row))) {
echo '\<div\> CAS: '.$row\[1\].' | '.$row\[2\].'\</div\>';
}
}

此外,如果未找到匹配项,我想回声“该试剂未在我们的存储中注册!如果 else {echo “message”;} 放在 while 循环中,则会出现多个消息实例。

我该如何解决这些问题?

php csv 搜索 while-loop

评论

0赞 CBroe 2/10/2023
问题很明显,“名称”列不仅包含 ,还包含 ,并且您为搜索词创建的(不区分大小写)模式也与该模式匹配。1H-Indazole3-Bromo-1H-indazole1H-Indazole
0赞 CBroe 2/10/2023
事实上,你只是将所有列的内容连接在一起,只在完整的字符串中搜索一次,在这里也不是太有帮助。我会重写它,以便它单独搜索列。然后,当您搜索“名称”列时,首先分解其内容。semicolon-space
0赞 CBroe 2/10/2023
如果您只是在寻找完全匹配项(您的搜索词将始终是全名,而不仅仅是其中的一部分),那么您可以简单地用于检查其中一个名称是否匹配;如果您还想要部分匹配,则必须遍历该数组并检查每个名称是否包含您的搜索短语。in_array
0赞 Thiago 2/11/2023
@CBroe,非常感谢您的所有评论。我考虑过不区分大小写的模式,因为用户可能会键入 1H-吲唑而不是 1H-吲唑。我确实想要部分匹配,我将尝试将您的建议应用于搜索列,然后使用分解。如果我成功,我将发布更新。

答: 暂无答案