Поиск в массиве строк - PullRequest
0 голосов
/ 02 мая 2010

Хорошо, я чувствую себя отсталым,

У меня есть такая строка:

$string = 'function module_testing() {';

или это может быть так:

$string = 'function module_testing()';

или это может быть так:

$string = 'function module_testing($params) {';

или это:

$string = 'function module_testing($params, $another = array())';

и многие другие способы ...

А чем у меня массив строк примерно такой:

$string_array = array('module_testing', 'another_function', 'and_another_function');

Теперь, есть ли какой-нибудь preg_match, который я могу сделать, чтобы проверить, найдено ли какое-либо из значений $string_array в строке $string в любой заданной позиции? Так что в этой ситуации будет совпадение. Или есть лучший способ сделать это?

Я не могу использовать in_array, поскольку это не точное совпадение, и я бы не стал делать цикл foreach, если смогу помочь, поскольку он уже находится в цикле while.

Спасибо:)

1 Ответ

2 голосов
/ 02 мая 2010

A foreach петля здесь является подходящим решением. Он не только наиболее читаемый, но и имеет три значения. Тот факт, что происходит в цикле while, не является проблемой.

foreach ($string_array as $v) {
  if (strpos($string, $v) !== false) {
    // found
  }
}

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

$search = '\Q' . implode('\E|\Q', $string_array) . '\E';
if (preg_match('!$search!`, $string)) {
  // found
}

Это две части. Во-первых, есть синтаксис |:

a|b|c

, что означает найти a, b или c. Вторая часть:

\Q...\E

, который ускользает от содержимого. Это означает, что если строки поиска содержат какие-либо специальные символы регулярного выражения (например, (), тогда регулярное выражение будет по-прежнему работать правильно.

В конечном счете, хотя я не вижу, чтобы это было быстрее, чем цикл foreach.

...