2012-06-05 10 views
8

Witam Próbuję to naprawić:Porównaj dwa ciągi znaków w php i pokaż różnice znaków

Chcę porównać dwa ciągi i obliczyć ich wynik w php.

Co to znaczy, mam dwa ciągi:

$ string1 = "Przykład1"; $ string2 = "exumple22";

Teraz chcę porównać ciągi, jeśli są one równe - w tym przypadku nie są.

Ale dodatkowo chcę zobaczyć znaki, które pasują. Przynajmniej je policz.

W tym przypadku będzie to: 6;

Próbowałem tego, ale siedzę do niej jest mój przykład:

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

Czy możesz opisać jak dokładnie utkniesz? Co konkretnie daje ci ból głowy? – Amadan

+1

Cóż, proszę zmniejszyć swój kod tylko do rzeczy ważnych dla rozwiązania problemu? – clentfort

Odpowiedz

2

można obliczyć odległość między levenshtein między 2 ciągi:

w najprostszej postaci funkcję tylko zajmie dwa ciągi jako parametr i obliczyć tylko liczbę wstawić, wymienić i usunąć operacje potrzebne do przekształcenia str1 w str2.

+2

Chce policzyć liczbę pasujących znaków, a nie odległość levenshtein. – js1568

+0

@ js1568, mój błąd, powinien zamiast tego użyć podobnego tekstu. – Tremmors

+0

Cześć, dziękuję, funkcja like_text() dałaby mi tylko procent, a nie dokładną liczbę pasujących znaków, prawda? – user1091883

2

Spróbuj

<?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); 
Powiązane problemy