PHP in_array с массивом сена регулярных выражений - PullRequest
0 голосов
/ 06 декабря 2018

Функция 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 голосов
/ 06 декабря 2018

Другой вариант:

$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"
}
0 голосов
/ 06 декабря 2018

preg_filter() принимает массив шаблонов, заменяет их и возвращает замененную строку.Итак, если он ничего не возвращает, значит, вы не нашли совпадений.

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