You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP检测字符串是否包含数组任意元素的代码如何高效简写

原有代码问题说明
  • 存在逻辑bug:当$stringArray不是数组时,strpos($stringArray, $searchInMe)的参数顺序完全颠倒,变成了在黑名单词汇里检索待检测字符串,和需求完全相反
  • 大小写匹配逻辑错误:仅将黑名单词汇转小写,待检测字符串没有同步转小写,会导致待检测字符串里的大写内容无法匹配到小写的黑名单词汇
  • 存在不必要的重复函数调用:每次循环都调用strtolower()处理黑名单词汇,重复开销可优化
简写优化版本
public static function includes_from_array($stringArray, $searchInMe, $offset = 0): bool
{
    $lowerTarget = strtolower($searchInMe);
    foreach ((array)$stringArray as $query) {
        if ($query !== '' && strpos($lowerTarget, strtolower($query), $offset) !== false) {
            return true;
        }
    }
    return false;
}
优化说明
  • 用(array)强转直接兼容非数组的$stringArray场景,省去单独的分支判断,代码更简洁
  • 提前一次性将待检测字符串转小写,仅调用1次strtolower(),代替原逻辑循环内N次的重复调用,执行效率更高
  • 保持短路返回逻辑,只要匹配到第一个黑名单词汇就立刻返回,不会遍历全部黑名单,效率不弱于原有实现
  • 修复了原有代码的参数顺序错误、大小写匹配错误的问题,功能正确性更高
  • 不建议用preg_match或者数组高阶函数(比如array_reduce/array_filter)实现,前者需要处理正则特殊字符转义开销,后者无法提前短路返回,遍历全部数组会拉低大数量黑名单下的执行效率

内容的提问来源于stack exchange,提问作者Sinros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 21:27:05