我正在寻找帮助来编写一个有效的PHP算法来帮助我在另一个字符串中找到String的出现。目前的情况如下。
我有两个数组。第一个数组是带有需要搜索的文本的数组(haystack)。第二个数组是一个术语数组ot(针)。
我知道我的第一个阵列至少有一个来自针头的术语。那么,算法需要说'array1 [0]在array1 [0]中找到?如果不是,循环,是在array1 [0]内找到array2 [1],等等'如果找到,退出,前进array1 [1]指针并重复该过程。
我想确保这是有效率的,因为我有10个1000的条目价格,我的针阵列有1100个单针。
答案 0 :(得分:1)
好吧,让我们从这个算法开始,它可能不是最快但结果就是你想要的。 (保持兴奋直到你找到第一场比赛)
<?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";
&GT;
//编辑:我评论了硬编码数组,现在动态创建它添加了一个计时器。 如果没有匹配,最多需要1秒钟。
答案 1 :(得分:1)
大海捞针的数据结构记录了一些其他信息,如单词位置(页面,行和单词编号),效率更高。它使用分而治之的策略来避免无用的查找。使用循环策略,将搜索大海捞针中的每个项目。干草堆里有一个干草堆,你可以跳过一些干草堆。以下是PHP中的示例:http://phpir.com/tries-and-wildcards