本文聚焦 PHP中判断数组键是否包含指定字符串:实用代码示例与技巧,旨在帮助开发者快速掌握在 PHP 中对键名进行筛选和匹配的多种实现方式。通过本篇文章,你将看到不同场景下的实现思路、注意点,以及可直接复用的代码片段。键名筛选 的需求在数据清洗、接口适配和配置解析等场景中非常常见,因此掌握这类技巧具有较高的实用价值。
方法一:使用 array_keys + array_filter 判断子字符串
实现思路
将 array_keys 得到的键名集合作为输入,借助 array_filter 的回调逐一检查 strpos 或 stripos 是否包含目标子字符串。该方式直观清晰,易于调试,且可以快速得到所有匹配的键名。
要点:先提取键名,再通过回调判断是否包含子字符串,若需要忽略大小写可使用 stripos,而不是 strpos。
1, 'userName' => 'John', 'created_at' => '2023-01-01'];
$substring = 'user';// 获取所有键名
$keys = array_keys($arr);// 过滤出包含子字符串的键名(区分大小写)
$matched = array_filter($keys, function($k) use ($substring) {return strpos($k, $substring) !== false;
});// 如需大小写不敏感,可替换为:
$matched_ci = array_filter($keys, function($k) use ($substring) {return stripos($k, $substring) !== false;
});var_dump($matched);
var_dump($matched_ci);
?>
在大多数场景下,这种做法的可读性最好,且可以灵活扩展为返回匹配的键和值,或仅判断是否存在任一匹配项,从而决定后续的处理逻辑。
方法二:使用正则表达式(preg_grep)实现按键子字符串筛选
实现思路
通过 preg_grep 对 array_keys 的结果进行模式匹配,pattern 使用 preg_quote 对目标子字符串进行转义,确保正则安全性。该方法在需要一次性获得所有匹配的键名时非常高效。
优势在于无需显式遍历键名即可得到过滤后的数组,同时可以轻松切换成大小写敏感或不敏感的匹配。
1, 'userName' => 'John', 'created_at' => '2023-01-01'];
$substring = 'user';// 提取键名并正则筛选包含子字符串的键
$keys = array_keys($arr);
$pattern = '/' . preg_quote($substring, '/') . '/';
$matched = preg_grep($pattern, $keys);var_dump($matched);
?>
性能考量:当数组键数量较大时,正则匹配在某些实现中可能比手动遍历略慢,但它的代码简洁、逻辑集中,适合快速实现需求和减少代码量。
方法三:使用遍历,结合 stripos 实现大小写不敏感的判断
实现思路
采用 foreach 循环对每个键执行 stripos,以实现大小写不敏感的子字符串匹配。这种方式对调试友好,且易于在匹配时记录下所有符合条件的键名。
在实际应用中,你可能需要对结果做进一步加工,例如将匹配的键名聚合为对象、统计数量或与对应的值联合输出。
1, 'userName' => 'John', 'CreatedAt' => '2023-01-01'];
$substring = 'user';
$matched = [];foreach ($arr as $k => $v) {if (stripos($k, $substring) !== false) {$matched[] = $k;}
}var_dump($matched);
?>
该方法的优势在于直观可控,便于在循环中实现复杂条件的组合筛选,例如同时检查多个子字符串、结合值的条件等。若你只关心是否存在匹配,可以在循环中直接返回布尔结果,从而避免额外的内存开销。



