Я создаю php-фильтр для своей веб-страницы, который проверяет массив, читает через файл, чтобы увидеть, содержит ли несколько полей ввода пользователя (имя, описание и т. Д.) Какое-либо из слов в массиве. Я попытался использовать функцию «strpos», встроенную в php, но по какой-то причине он обнаружил только слово, если слово было последним в строке, т. Е. Если бы я проверял слово «cat», он обнаружил бы это, если бы это было проверяя «это кошка» и «скат», но не проверяли «кошек» или «игрушку с кошками» или даже просто «кошку» с пробелом после нее. Чтобы быть ясным, я проверил, не была ли функция strpos не равна false (strpos (...)! == false). Поэтому я создал свою собственную функцию, которая разбивает строку на каждую возможную подстроку и проверяет каждую из них, чтобы убедиться, что она равна любому из слов в массиве. Есть ли более быстрый способ, которым я мог бы это сделать, или способ ускорить выполнение этого кода? Вот код:Как я могу ускорить эту функцию PHP?
function arrayContains($string, array $array){
$string = strtolower($string);
$len=strlen($string);
foreach($array as $check){
for($i=0; $i<$len; $i++){
for($j=1; $j<=$len-$i; $j++){
$sub=substr($string,$i,$j);
if($sub==$check)
return true;
}
}
}
return false;
}
Возможно, вы могли бы пойти другим путем и использовать 'in_array()' – developerwjk
Я просто попробовал это, и он экспоненциально быстрее. Спасибо огромное! – carsond2704
Не могли бы вы рассказать о проблеме strpos? У меня такое чувство, что вы не различаете функцию, возвращающую 0, и логическое значение false. Если вы ищете «кошку» в «кошках» или «кошках» с пробелом, она вернет 0, потому что счетные множества начинаются с нуля, а не 1. Если вы просто делаете «if (strpos()) {condition true} «0 отбрасывается на false, так что это не сработает. Вам нужна строгая проверка равенства, то есть «if strpos (...)! == false ...» –