php – является ли strpos самым быстрым способом поиска строки в большом тексте?

if (strpos(htmlentities($storage->getMessage($i)),'chocolate')) 

Привет, я использую gmail oauth для поиска определенных текстовых строк в адресах электронной почты. Можно ли быстрее и эффективнее находить экземпляры текста, чем использовать strpos в приведенном выше коде? Должен ли я использовать хэш-метод?

Related of "php – является ли strpos самым быстрым способом поиска строки в большом тексте?"

Согласно руководству PHP, yes- strpos() – это самый быстрый способ определить, содержит ли одна строка другую.

Заметка:

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

Это время и время цитируется в любой статье php.net о других строковых компараторах (я вытащил это из strstr() )

Хотя есть два изменения, которые должны быть внесены в ваше заявление.

 if (strpos($storage->getMessage($i),'chocolate') !== FALSE) 

Это связано с тем, что if(0) оценивается как false (и, следовательно, не работает), однако strpos() может возвращать 0, если игла находится в самом начале (позиция 0) стога сена. Кроме того, удаление htmlentities() сделает ваш код намного быстрее. Все, что htmlentities() , заменяет определенные символы соответствующим HTML-эквивалентом. Например, он заменяет каждый & &

Как вы можете себе представить, проверка каждого символа в строке индивидуально и замена многих из них – чрезвычайно интенсивная память и процессор. Не только это, но это необязательно, если вы планируете просто выполнять текстовое сравнение. Например, сравните следующие утверждения:

 strpos('Billy & Sally', '&'); // 6 strpos('Billy & Sally', '&'); // 6 strpos('Billy & Sally', 'S'); // 8 strpos('Billy & Sally', 'S') // 12 

Или, в еще более крайнем случае, вы можете даже заставить что-то истинное оценивать как ложное.

 strpos('<img src...', '<'); // 0 strpos('&lt;img src...','<'); // FALSE 

Чтобы обойти это, вы могли бы использовать еще больше объектов HTML.

 strpos('&lt;img src...', '&lt;'); // 0 

Но это, как вы можете себе представить, не только раздражает код, но и становится излишним. Вам лучше исключить HTML-объекты целиком. Обычно объекты HTML используются только при выводе текста. Не сравнивать.

strpos , вероятно, будет быстрее, чем preg_match, и альтернативы в этом случае, лучшая идея – сделать некоторые собственные тесты с реальными примерами данных и посмотреть, что лучше всего подходит для ваших нужд, хотя это может переусердствовать. Не беспокойтесь о производительности, пока она не начнет становиться проблемой