Мне нужно проверить, существует ли какая-либо из строк 'hello', 'i am', 'dumb' в более длинной строке с именем $ ohreally, , если хотя бы одна из них существует, мой тест закончен, и знание, что ни один из других не произойдет, если один из них имеет.
В этих условиях я прошу вашей помощи по наиболее эффективному способу написания этого поиска,
strpos () 3 раза, как это?
if (strpos ($ohreally, 'hello')){return false;}
else if (strpos ($ohreally, 'i am')){return false;}
else if (strpos ($ohreally, 'dumb')){return false;}
else {return true;}
или один preg_match?
if (preg_match('hello'||'i am'||'dumb', $ohreally)) {return false}
else {return true};
Я знаю, что код preg_match неверен, я был бы очень признателен, если бы кто-то мог предложить его правильную версию.
Спасибо!
Ответ
Пожалуйста, прочитайте, что сказал Клетус, и тест миддапарка сделал ниже. Я также проводил тестирование времени на разных струнах, длинных и коротких. с этими результатами
ЕСЛИ вам известна вероятность появления строковых значений, ЗАкажите их от наиболее вероятных до наименьших. (Я не заметил презентабельного отличия в заказе самого регулярного выражения, то есть между /hello|i am|dumb/
или /i am|dumb|hello/
.
С другой стороны, в последовательном strpos вероятность имеет все значение. Например, если «привет» происходит 90%, «я» 7% и «тупой» 3% времени. Вы хотели бы организовать свой код, чтобы сначала проверить «привет» и выйти из функции как можно скорее.
мои микротайм-тесты показывают это.
для стогов сена A, B и C, в которых игла находится соответственно при первом, втором и третьем выполнении strpos (), времена следующие:
StrPos:
A: 0,00450 секунд // 1 strpos ()
B: 0,00911 секунды // 2 strpos ()
C: 0,00833 секунды // 3 strpos ()
C: 0,01180 секунд // 4 strpos () добавлен один дополнительный
и для preg_match:
A: 0,01919 секунд // 1 preg_match ()
B: 0,02252 секунды // 1 preg_match ()
C: 0,01060 секунд // 1 preg_match ()
как показывают цифры, strpos быстрее до 4-го выполнения, поэтому я буду использовать его вместо этого, так как у меня есть только 3 подпункта для проверки:)