2012-07-28 109 views
0

我持有两个单词列表,比方说listA和listB。 我想检查listB中的每个单词是否包含在listA中。 直观的方法就是去每个单词数组listB和检查:PHP字符串包含一个子字符串

$pos = strpos($word , $listBContent) ; 
if($pos != false) { ... } 

但恐怕这样的处理过于“昂贵” - 假设listA的和数组listB包含每个n词,复杂性会是O(n^2)。 有什么方法可以用来更有效地运行这个特定的过程? 我想过使用后缀树,但如果可能(以及如何)从单词列表中创建一个,而不是从单个单词创建一个后缀树,我不知道。 任何建议将是有益的, 在此先感谢

+0

我不知道你需要使用'回答你的问题,但在你的代码的情况下! ==',否则如果'$ pos'为0,它将评估为'false'。 – lafor 2012-07-28 21:43:36

+0

尽管这不是重点,但你是对的! – Itamar 2012-07-28 21:46:00

+0

@Itamar:你如何列出看起来像?曾经听说过阵列? – 2012-07-28 21:46:46

回答

0

有一个叫array_intersect功能:

<?php 
$array1 = array("a" => "green", "red", "blue"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_intersect($array1, $array2); 
print_r($result); 
?> 
+0

谢谢!你有什么想法与我带来的方法相比,这个功能有多高效? – Itamar 2012-07-28 21:45:10

+0

对不起,我没有真正测试它的效率。但是这是内置的方法,所以它不会那么糟糕吗? :) – Tarik 2012-07-28 21:46:26

+0

@Itamar:你可以通过在每个函数前后调用'microtime()'来轻松地进行检查,然后减去它们。这会给你花时间来执行每一个。 – 2012-07-28 21:48:08

相关问题