
本文介绍如何在 php 中判断指定子字符串是否出现在数组的任意元素中,而非要求整个字符串完全匹配,通过自定义函数结合 `strpos()` 实现高效、准确的局部匹配。
在 PHP 开发中,in_array() 只能进行全值精确匹配,例如 $string === "world" 才会返回 true。但实际业务中,我们常需判断某个关键词(如 "wor")是否作为子串出现在数组某元素内部(如 "world"),此时必须借助字符串查找函数。
推荐使用以下封装函数实现灵活匹配:
function containsSubstringInArray(array $array, string $keyword): bool {
foreach ($array as $item) {
if (is_string($item) && strpos($item, $keyword) !== false) {
return true;
}
}
return false;
}
// 使用示例
$array = ["hello", "world", "!"];
$string = "wor";
if (containsSubstringInArray($array, $string)) {
echo "match"; // 输出:match
} else {
echo "not match";
}✅ 优势说明:
- 返回布尔值,语义清晰,适配 if 条件判断;
- 显式类型检查(is_string())避免对非字符串元素调用 strpos() 报错;
- 时间复杂度为 O(n×m),适用于中小规模数组,性能可控。
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- strpos() 区分大小写,如需忽略大小写,请改用 stripos();
- 若需支持正则高级匹配(如单词边界 \bword\b),应改用 preg_grep();
- 原问题中 in_array($string, [$array]) 存在语法错误——[$array] 会创建一个包含数组的二维数组,应避免。
总结:替代 in_array() 进行子串搜索时,优先选择轻量级 foreach + strpos() 方案,兼顾可读性、健壮性与执行效率。











