PHP一个很好的循环数组来搜索字符串的算法?

时间:2012-02-15 01:39:08

标签: php

我正在寻找帮助来编写一个有效的PHP算法来帮助我在另一个字符串中找到String的出现。目前的情况如下。

我有两个数组。第一个数组是带有需要搜索的文本的数组(haystack)。第二个数组是一个术语数组ot(针)。

我知道我的第一个阵列至少有一个来自针头的术语。那么,算法需要说'array1 [0]在array1 [0]中找到?如果不是,循环,是在array1 [0]内找到array2 [1],等等'如果找到,退出,前进array1 [1]指针并重复该过程。

我想确保这是有效率的,因为我有10个1000的条目价格,我的针阵列有1100个单针。

2 个答案:

答案 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