in_array против производительности preg_match - PullRequest
0 голосов
/ 28 января 2020

Предположим, у меня большой массив строк, и мне нужно искать, соответствует ли строка одной из них. Я должен сделать так много для одного и того же массива (поэтому я могу подготовить строку регулярного выражения один раз и использовать ее снова и снова). Я могу сделать это с помощью in_array () следующим образом:

$fruites = array('Apple', 'Banana', 'Orange', ....);
$some_string = 'Strawberry';

//usage
$result = in_array($some_string, $fruites);

Я также могу выполнить поиск по регулярному выражению, например:

$fruites_regex = '/'.implode('|', $fruites).'/';

// usage
$result = preg_match($fruites_regex, $some_string);

Какой из методов более эффективен?

второй вопрос по той же теме:

Что если у меня есть массив укусов и массив шаблонов anoter:

$fruites = array('Apple', 'Banana', 'Orange', ....);
$patterns = array('^[A-Z]{1}[a-z]{2,5}$', '^_[A-Z]{0,1}', '[a-z]{7}$', ....);

Я могу искать в каждом массиве само по себе:

$patterns_regex = '/'.implode('|', $patterns).'/';

//usage
$result = in_array($some_string, $fruites) || preg_match($patterns_regex , $some_string);

или объединить их в одно регулярное выражение:

$combined_regex = '/'.implode('|', $patterns).'|^'.implode('$|^', $fruites)'$/';

//usage
$result = preg_match($combined_regex , $some_string);

Что более эффективно (опять же, я строю регулярное выражение один раз и использую его много раз в больших массивах) )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...