Предположим, у меня большой массив строк, и мне нужно искать, соответствует ли строка одной из них. Я должен сделать так много для одного и того же массива (поэтому я могу подготовить строку регулярного выражения один раз и использовать ее снова и снова). Я могу сделать это с помощью 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);
Что более эффективно (опять же, я строю регулярное выражение один раз и использую его много раз в больших массивах) )