if (strpos(htmlentities($storage->getMessage($i)),'chocolate'))
Привет, я использую gmail oauth для поиска определенных текстовых строк в адресах электронной почты. Можно ли быстрее и эффективнее находить экземпляры текста, чем использовать 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('<img src...','<'); // FALSE
Чтобы обойти это, вы могли бы использовать еще больше объектов HTML.
strpos('<img src...', '<'); // 0
Но это, как вы можете себе представить, не только раздражает код, но и становится излишним. Вам лучше исключить HTML-объекты целиком. Обычно объекты HTML используются только при выводе текста. Не сравнивать.
strpos , вероятно, будет быстрее, чем preg_match, и альтернативы в этом случае, лучшая идея – сделать некоторые собственные тесты с реальными примерами данных и посмотреть, что лучше всего подходит для ваших нужд, хотя это может переусердствовать. Не беспокойтесь о производительности, пока она не начнет становиться проблемой