Согласно руководству по PHP, yes- strpos()
- самый быстрый способ определить, содержит ли одна строка другую.
Примечание:
Если вы хотите только определить, находится ли конкретная игла в стоге сена,
используйте вместо этого более быструю и менее интенсивную функцию strpos ().
Это цитируется снова и снова в любой статье php.net о других компараторах строк (я взял это из strstr()
)
Хотя есть два изменения, которые должны быть внесены в ваше заявление.
if (strpos($storage->getMessage($i),'chocolate') !== FALSE)
Это потому, что if(0)
оценивается как ложное (и, следовательно, не запускается), однако 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-объекты используются только при выводе текста. Не сравнивая.