广告

PHP中判断数组键是否包含指定字符串:实用代码示例与技巧

本文聚焦 PHP中判断数组键是否包含指定字符串:实用代码示例与技巧,旨在帮助开发者快速掌握在 PHP 中对键名进行筛选和匹配的多种实现方式。通过本篇文章,你将看到不同场景下的实现思路、注意点,以及可直接复用的代码片段。键名筛选 的需求在数据清洗、接口适配和配置解析等场景中非常常见,因此掌握这类技巧具有较高的实用价值。

方法一:使用 array_keys + array_filter 判断子字符串

实现思路

array_keys 得到的键名集合作为输入,借助 array_filter 的回调逐一检查 strposstripos 是否包含目标子字符串。该方式直观清晰,易于调试,且可以快速得到所有匹配的键名。

要点:先提取键名,再通过回调判断是否包含子字符串,若需要忽略大小写可使用 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_greparray_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);
?> 

该方法的优势在于直观可控,便于在循环中实现复杂条件的组合筛选,例如同时检查多个子字符串、结合值的条件等。若你只关心是否存在匹配,可以在循环中直接返回布尔结果,从而避免额外的内存开销。

PHP中判断数组键是否包含指定字符串:实用代码示例与技巧

广告

后端开发标签