PHP:比较两个字符串的开始

问题描述:

我想知道是否有一种简单的方法来在PHP中比较两个字符串,并返回它们从字符串开头共同拥有的字符数量。PHP:比较两个字符串的开始

一个例子:

$s1 = "helloworld"; 
$s1 = "hellojohn"; 

这两个串都与启动“你好”,这意味着两个字符串共同具有前5个字符。 '5'是我比较这两个字符串时要接受的值。

有没有一个计算快速的方式做到这一点,而无需将两个字符串作为数组来比较?

+1

据我所知,我不认为有这样的内置函数。最有可能的是,你将不得不自己做。 –

function commonChars($s1, $s2) { 
    $IMAX = min(strlen($s1), strlen($s2)); 
    for($i = 0; $i < $IMAX; $i++) 
     if($s2[i] != $s1[i]) break; 
    return $i; 
} 
+0

它被编辑;-) –

+1

你应该在循环前预先计算'min(strlen($ s1),strlen($ s2))',所以它不会在每次**迭代时重新计算。 –

+0

谢谢joeframbach,你说得对。它被纠正了。 –

据我所知,我不认为有这样的内置函数。最有可能的是,你将不得不自己制作。

不应该太难。只需按索引循环两个字符串,直到找不到不匹配的匹配。然而,你得到的是答案。

希望有帮助!

如果字符串真的很大,那么我会写我自己的二进制搜索。类似于我刚才梦寐以求的完全未经测试的代码。

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; 
    } 
} 

如果它是字符串的你希望得到,而不仅仅是相同字符的实际数量的相似性,也有两个功能:strcmplevenshtein。也许他们比你在这个问题上要求的更适合你的目标。

+1

这很可能是他们真正想要的。 –

有一个函数将返回您正在寻找。

check this link。希望这会对你有所帮助。

另请参阅this link有一个PHP的预编译功能。 第二个链接与问题无关,但希望会有所帮助。