![](/img/trans.png)
[英]search through array of strings for string match from another array 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.