2012-06-05 112 views
8

您好我很努力获得这项权利:比较PHP两个字符串,并显示字符差异

我想比较两个字符串,并计算其在PHP的分数。

它的意思是我有两个字符串:

$字符串1 = “例1”; $ string2 =“exumple22”;

现在我想比较字符串,如果他们是相等的 - 在这种情况下,他们不是。

但另外我想看到匹配的字符。至少要数它们。

在这种情况下,将是:6;

我都试过,但我坚持她是我举的例子:

enter code here 
<? 
include("connect.php"); 
$query="SELECT * FROM data where ID = '1'"; 
$result = mysql_query($query) or die(mysql_error()); 


while($row = mysql_fetch_array($result)) 
{ 
    //echo "Score :{$row['scoreA']} <br>" ; 
    $scoretemp=$row['scoreA']; 
    $string1=$row['textA1']; 
    $string2=$row['textA2']; 


} 
mysql_close(); 

if (strcmp($string1, $string2) != 0){ 
    echo "not equal in a case-sensitive string comparison <br>"; 
$j = strlen($string1); 
    for ($i = 0; $i < $j; $i++) { 
    $stringtemp1++; 
    echo $string1[$i].', '; 
    echo $stringtemp1; 
    }  

    $u = strlen($string2); 
    for ($t = 0; $t < $u; $t++) { 
    $stringtemp2++; 
    echo $string2[$t].', '; 
    echo $stringtemp2; 
    }$scoreA=($stringtemp1 - $stringtemp2);  
    $stringtemp1=0;$stringtemp2=0; 
} 
else{ 
    echo "Stringmatch! <br>"; 
     $e = strlen($string1); 
     for ($r = 0; $r < $e; $r++) { 
     $stringtemp1++; 
     echo $string1[$r].', '; 
     echo $stringtemp1; 
}$scoreA=$stringtemp1; 
$stringtemp1=0; 
} 
?> 
+1

你能描述一下你究竟是如何被卡住?具体是什么让你头痛? – Amadan

+1

请注意,请将您的代码仅限于解决问题的重要事项? – clentfort

回答

2

可以计算两个字符串之间的levenshtein距离:

的最简单形式的功能中,只有将采取两个字符串作为参数,并将计算将str1转换为str2所需的插入,替换和删除操作的次数。

+2

他想计算匹配字符的数量,而不是levenshtein距离。 – js1568

+0

@ js1568,我的错误,他应该用类似文字代替 – Tremmors

+0

嗨谢谢,similar_text()只会给我一个百分比而不是匹配字符的确切数目吧? – user1091883

2

试试这个

<?php 

$string1 = 'example1'; 
$string2 = 'exumple22'; 

$matchingcharacters = []; 
$mismatchingcharacters = []; 

$len1 = strlen($string1); 
$len2 = strlen($string2); 

$similarity = $i = $j = $dissimilarity = 0; 

while (($i < $len1) && isset($string2[$j])) { 
    if ($string1[$i] == $string2[$j]) { 
     $similarity++; 
     $matchingcharacters[] = '['.$string1[$i].']'; 
    } else { 
     $dissimilarity++; 
     $mismatchingcharacters[] = '['.$string1[$i] . " & " . $string2[$j].']'; 
    } 
    $i++; 
    $j++; 
} 
echo 'First string : '.$string1.'<br>'; 
echo 'Second string : '.$string2.'<br>'; 
echo 'Similarity : ' . $similarity . '<br>'; 
echo 'Dissimilarity : ' . $dissimilarity . '<br>'; 
echo 'Matching characters : ' . implode(",", $matchingcharacters) . '<br>'; 
echo 'Mismatching characters : ' . implode(",", $mismatchingcharacters);