带有正则表达式干草堆数组的PHP in_array

时间:2018-12-06 16:15:26

标签: php preg-match

PHP函数in_array是否接受REGEXP数组作为第二个参数? 我在PHP.net

上找不到任何相关信息

这是我当前正在使用的代码:

$haystack = [
    "/^foo$/",
    "/^bar$/",
    "/^foobar$/"
];

function in_reg_array($needle, $haystack) {
    foreach ($haystack as $straw)
        if (preg_match($straw, $needle))
            return TRUE;
    return FALSE;
}

如果有人有更好的解决方案,我欢迎您提出建议。

编辑:

我不能对foo|bar|foobar使用单个正则表达式,因为干草堆各不相同。

2 个答案:

答案 0 :(得分:1)

preg_filter()接受一组模式,替换它们,然后返回替换后的字符串。因此,如果它什么都不返回,则说明没有匹配项。

function in_reg_array($needle, $haystack) {
    return preg_filter($haystack, '', $needle) !== null;
}

答案 1 :(得分:1)

另一个选择:

$haystack = [
    "^foo$",
    "^bar$",
    "^foobar$"
];

$string = ['foo', 'bar','baz', 'foo2'];

$result = preg_grep("/(".implode('|',$haystack).")/", $string);

输出:

array(2) {
  [0]=> string(3) "foo"
  [1]=> string(3) "bar"
}