簡體   English   中英

PHP 循環遍歷數組以搜索字符串的好算法?

[英]PHP A good algorithm to loop through an array to search for strings?

我正在尋找幫助來編寫一個有效的 PHP 算法來幫助我找到另一個字符串中出現的字符串。 這是目前的情況。

我有兩個數組。 第一個數組是包含需要搜索的文本的數組(干草堆)。 第二個數組是一組術語 ot find (needle)。

我知道我的第一個陣列至少有一個來自針的術語。 因此,該算法需要說'是否在 array1[0] 中找到了 array2[0]? 如果沒有,循環,是否在array1[0] 中找到array2[1],等等' 如果找到,退出,前進array1[1] 指針並重復該過程。

我想確保這是有效的,因為我有 10 個到 1000 個價格條目,並且我的針陣列有 1100 個單獨的針。

好的,讓我們從這個算法開始,它可能不是最快的,但結果是你想要的。 (繼續跳,直到找到第一場比賽)

<?php
for ($i = 0; $i < 1000; $i++) {
    $haystack[] = "Lorem ipsum dolor";
    $needle[] = "no match";
}
// $haystack = array("Lorem ipsum dolor", "Quisque placerat", "Cras quis porttitor orci");
//$needle = array("quis", "Lorem");
$timestamp1 = time() +  microtime();
foreach ($haystack as $word){
    foreach ($needle as $pattern){
        if(strpos($word, $pattern) === false){
            //Keep looping
        }else{
            //exit inner loop
            print "'".$pattern."' is in '".$word."'<br />";
            break;
        }
    }
}

$timestamp2 = time() + microtime();
print "It took me ".($timestamp2 - $timestamp1)." seconds to realize there was no match";

?>

//編輯:我評論了硬編碼數組,現在動態創建它並添加一個計時器。 如果沒有匹配項,最多需要大約 1 秒。

記錄了一些其他信息,如字位置(頁、行和字號)的 haystack 特里數據結構更有效。 它使用分而治之的策略來避免無用的查找。 使用循環策略可以搜索大海撈針中的每一項。 對干草堆進行排序,您可以跳過一些干草堆。 這是 PHP 中的一個示例: http : //phpir.com/tries-and-wildcards

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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