[英]How Can I Speed Up This PHP Function?
我正在為我的網頁制作一個php過濾器,該過濾器可以檢查數組,讀取文件,以查看幾個用戶輸入字段(名稱,描述等)是否包含數組中的任何單詞。 我嘗試使用php中內置的“ strpos”函數,但無論出於何種原因,它僅在單詞是字符串中的最后一個單詞時才檢測到該單詞,即,如果我正在檢查單詞“ cat”,它將檢測到該單詞是否為檢查“這是一只貓”和“貓”,但如果檢查的是“貓”或“貓玩具”,甚至只是“貓”后面有空格,則不進行檢查。 為了清楚起見,我確實檢查了strpos函數是否不等於false(strpos(...)!== false)。 因此,我創建了自己的函數,該函數將字符串分解為每個可能的子字符串,並檢查每個子字符串是否等於數組中的任何單詞。 有沒有更快的方式可以執行此操作,或者可以加快代碼執行速度? 這是代碼:
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;
}
我懷疑您可能一直在濫用strpos()
; 要么以錯誤的順序放置參數,要么不檢查真實的布爾結果。 這應該工作:
function foundInArray($string, $array){
$string = strtolower($string);
foreach($array as $check){
if (strpos($string, strtolower($check)) !== false) {
return true;
}
}
return false;
}
編輯以添加結果:
php > $array = ["foo", "bar", "baz"];
php > $string = "Cheese is a food I like";
php > var_dump(foundInArray($string, $array));
bool(true)
php > $string = "Cheese is a thing I like";
php > var_dump(foundInArray($string, $array));
bool(false)
@developerwjk提出的這個答案有助於解決我的問題。 我仍然願意接受更多建議,即使有的話。 function arrayContains($string, array $array){ $string = strtolower($string); $len=strlen($string); for($i=0; $i<$len; $i++){ for($j=1; $j<=$len-$i; $j++){ $sub=substr($string,$i,$j); if(in_array($sub, $array)) return true; } } return false; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.