本文介绍使用 php 的 `array_uintersect` 函数配合 `strcasecmp` 实现高效、准确的不区分大小写单词匹配,适用于从 api 响应中提取并校验成分等场景。
在实际开发中,我们常需从非结构化文本(如 API 返回的 "Ingredients: Whey, bEEf, EgG, NuTs")中提取关键词,并判断其是否存在于预定义的敏感词或目标词数组中。关键挑战在于:原始字符串格式不规范(含标点、空格、大小写混杂),且匹配必须忽略大小写。
直接使用 array_intersect() 会因大小写差异导致匹配失败;而 array_search(strtolower($string), ...) 又仅支持单值比对,无法满足“任一单词命中即返回 true”的需求。
✅ 推荐方案:array_uintersect() + strcasecmp()
该函数对两个数组执行交集运算,并允许传入自定义比较回调——strcasecmp() 正是专为不区分大小写的字符串比较设计的内置函数,返回值符合 array_uintersect 所需的三值逻辑(0)。
以下是完整、健壮的实现示例:
strcasecmp($a, $b)); // 步骤 4:判断是否存在至少一个匹配项 $hasMatch = !empty($result); echo $hasMatch ? "True" : "False"; // 输出: True(因为 'beef' 和 'NUTS' 均匹配) print_r($result); // 显示匹配到的元素(保留原始大小写形式) ?>
? 关键说明与注意事项:
此方法简洁、可靠、符合 PHP 最佳实践,无需手动遍历或多次 strtolower() 转换,是处理此类不区分大小写多词匹配问题的首选方案。