我想知道在PHP中是否有一种简单的方法可以比较两个字符串并从字符串的开头返回它们共有的字符数。
一个例子:
$s1 = "helloworld";
$s1 = "hellojohn";
这两个字符串都以'hello'开头,这意味着两个字符串共有前5个字符。 '5'是我在比较这两个字符串时想要接受的值。
如果没有将两个字符串作为数组相互比较,是否有一种计算速度快的方法呢?
答案 0 :(得分:4)
function commonChars($s1, $s2) {
$IMAX = min(strlen($s1), strlen($s2));
for($i = 0; $i < $IMAX; $i++)
if($s2[i] != $s1[i]) break;
return $i;
}
答案 1 :(得分:1)
如果字符串真的很大,那么我会编写自己的二进制搜索。类似于我刚想到的这个完全未经测试的代码。
function compareSection($start, $end, $string1, $string2) {
$substr1 = substr($string1, $start, $end-$start);
$substr2 = substr($string2, $start, $end-$start);
if ($substr1 == $substr2) return $end;
if ($firstMatches = compareSection(0, $end/2, $substr1, $substr2)) {
return $start + $firstMatches;
if ($lastMatches = compareSection($end/2, $end, $substr, $substr2)) {
return $start+$lastMatches;
}
}
答案 2 :(得分:1)
如果它是您希望获得的字符串的相似性而不仅仅是相同字符的实际数量,则有两个函数:strcmp和levenshtein。也许它们比你在这个问题中所要求的更适合你的目标。
答案 3 :(得分:0)
据我所知,我不认为这样的东西有内置功能。最有可能的是,你必须自己做。
不应该太难。只需按索引循环索引两个字符串,直到找不到匹配的匹配项。无论你得到多远都是答案。
希望有所帮助!
答案 4 :(得分:0)