如何有效地确定给定字符串是否包含两个字符串?
例如,假设我给了字符串:abc-def-jk-l
。此字符串包含两个字符串除以-
,或者它不匹配。匹配的可能性是:
Possible Matches for "abc-def-jk-l" :
abc def-jk-l
abc-def jk-l
abc-def-jk l
现在,这是我要匹配的字符串列:
Column I Column II
------- -------
1. abc-def A. qwe-rt
2. ghijkl B. yui-op
3. mn-op-qr C. as-df-gh
4. stuvw D. jk-l
如何有效地检查给定字符串是否与上面列中的两个字符串匹配? (以上是匹配 - 匹配abc-def
和jk-l
)
以下是一些例子:
abc-def-yui-op [MATCH - Matches 1-B]
abc-def-zxc-v [NO MATCH - Matches 1, but not any in column II.]
stuvw-jk-l [MATCH - Matches 4-D]
mn-op-qr-jk-l [Is this a match?]
现在,给定上面的字符串,我如何有效地确定匹配? (效率将是关键,因为列i和ii将在其所尊重的表中的索引列上各有数百万行!)
UPDATE:
订单将始终为第i列,然后是第ii列。 (或“不匹配”,这可能意味着它只匹配一列或没有)
这里有一些PHP帮助:
<?php
$arrStrings = array('abc-def-yui-op','abc-def-zxc-v','stuvw-jk-l','stuvw-jk-l');
foreach($arrStrings as $string) {
print_r(stringMatchCheck($string));
}
function stringMatchCheck($string) {
$arrI = array('abc-def','ghijkl','mn-op-qr','stuvw');
$arrII = array('qwe-rt','yui-op','as-df-gh','jk-l');
// magic stackoverflow help goes here!
if ()
return array($match[0],$match[1]);
else
return false;
}
?>
答案 0 :(得分:2)
只需使用PHP的strpos()
即可。循环直到您使用$arrI
在$string
的{{1}}中找到条目,并对strpos()
执行相同操作。
有关$arrII
的更多信息:http://php.net/manual/en/function.strpos.php
编辑:
为了帮助您了解我在说什么,这是您的功能:
strpos()
答案 1 :(得分:1)
为了提高效率,不是遍历每列中的每个条目,而是将字符串拆分为尽可能多的不同单词并搜索每个单词组合。基本上你提到的可能匹配。
$words = explode("-", $string);
$end = count($words) - 1;
for ( $i = 1; $i < $end; $i++ ) {
$partOne = array_slice($words, 0, $i);
$parttwo = array_slice($words, $i);
$wordOne = implode("-" , $partOne);
$wordTwo = implode("-" , $partTwo);
/* SQL to select $wordOne and $wordTwo from the tables */
}