簡體   English   中英

如何加快此PHP功能?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM