PHP如何检测函数是否匹配给定数组中的任意元素?
实现方案
错误原因说明
你之前的写法存在两层逻辑错误:
- 你将数组拼接为完整字符串后调用
in_array判断,返回结果永远是布尔值false(原数组中不存在你拼接出的长字符串元素) - 你将
in_array返回的布尔值传入has_block函数,不符合该函数需要接收块名称字符串作为参数的要求,自然无法得到正确结果
通用兼容实现方案(适配所有PHP版本)
直接遍历数组,只要匹配到符合条件的元素就终止遍历,性能最优:
$values = [ 'value_1', 'value_2', 'value_3' ]; $hasValidBlock = false; foreach ($values as $blockName) { if (has_block($blockName)) { $hasValidBlock = true; break; // 命中后直接跳出,无需遍历剩余元素 } } if ($hasValidBlock) { // 执行相关逻辑 }
PHP 8.0+ 简洁写法
PHP 8.0及以上版本可以直接使用内置的array_any函数,一行即可完成判断:
$values = [ 'value_1', 'value_2', 'value_3' ]; if (array_any($values, fn($item) => has_block($item))) { // 执行相关逻辑 }
内容的提问来源于stack exchange,提问作者Damian_B
相关产品推荐
相关产品推荐

