2012-06-05 67 views
8

Xin chào Tôi đang đấu tranh để có được quyền này:so sánh hai chuỗi trong php và hiển thị các khác biệt về ký tự

Tôi muốn so sánh hai chuỗi và tính toán điểm số của chúng trong php.

Điều đó có nghĩa là tôi có hai chuỗi:

$ string1 = "example1"; $ string2 = "exumple22";

Bây giờ tôi muốn so sánh các chuỗi nếu chúng bằng nhau - trong trường hợp này thì không.

Nhưng ngoài ra tôi muốn xem các ký tự phù hợp. Ít nhất đếm chúng.

Trong trường hợp này sẽ là: 6;

Tôi đã thử điều này, nhưng tôi đang mắc kẹt cô là ví dụ của tôi:

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

Bạn có thể mô tả cách chính xác bạn đang mắc kẹt? Điều gì đặc biệt khiến bạn đau đầu? – Amadan

+1

Bạn có muốn giảm mã của mình xuống chỉ những thứ quan trọng để giải quyết vấn đề của mình không? – clentfort

Trả lời

2

Bạn có thể tính toán khoảng cách levenshtein giữa 2 chuỗi:

Trong đơn giản nhất của nó hình thành chức năng sẽ mất chỉ hai chuỗi là tham số và sẽ tính toán chỉ số lần chèn, thay thế và xóa các hoạt động cần thiết để biến str1 thành str2.

+2

Anh ấy muốn đếm số ký tự trùng khớp, không phải khoảng cách levenshtein. – js1568

+0

@ js1568, sai lầm của tôi, anh ấy nên sử dụng văn bản tương tự thay vì – Tremmors

+0

Xin chào cảm ơn bạn, similar_text() sẽ chỉ cho tôi tỷ lệ phần trăm không phải là số lượng chính xác các ký tự phù hợp đúng không? – user1091883

9

Xem http://www.php.net/manual/en/function.similar-text.php về cách sử dụng similar_text($str1, $str2)

này sẽ cung cấp cho bạn số lượng phù hợp với ký tự trong cả chuỗi.

<?php 
    echo similar_text("Hello World","Hello Peter"); 
?> 

sẽ cho bạn 7 (số ký tự chung).

2

Hãy thử điều này

<?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); 
Các vấn đề liên quan