PHP一种在数组中循环搜索字符串的好算法


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

我正在寻求帮助,编写一个高效的PHP算法,帮助我在另一个字符串中查找字符串的出现。这是目前的情况。

我有两个数组。第一个数组是包含需要搜索的文本的数组(haystack)。第二个数组是查找(指针)项的数组。

我知道我的第一个数组至少有一个来自指针的术语。因此,算法需要说"在array1[0]中找到array2[0]了吗?"?如果没有,循环,是在array1[0]中找到的array2[1],etc'如果找到了,退出,前进array1[1]指针并重复该过程。

我想确保这是有效的,因为我有1000个条目中的10个要定价,我的针阵列有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秒。

草堆的trie数据结构记录一些其他信息,如单词位置(页面、行和单词编号)更有效。它使用分而治之的策略来避免无用的查找。使用循环策略,可以搜索干草堆中的每一项。一个trie分类干草堆,你可以跳过一些干草堆。下面是一个PHP示例:http://phpir.com/tries-and-wildcards