2012-06-05 22 views
8

Hi Ho difficoltà a ottenere questo diritto:confrontare due stringhe in PHP e mostrano differenze di carattere

voglio mettere a confronto due stringhe e calcolare il loro punteggio in php.

Ciò significa che ho due stringhe:

$ stringa1 = "esempio1"; $ string2 = "exumple22";

Ora voglio confrontare le stringhe se sono uguali - in questo caso non lo sono.

Ma in più voglio vedere i personaggi che corrispondono. Almeno contali.

In questo caso sarebbe: 6;

Ho provato questo ma lei sono bloccato è il mio esempio:

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

Puoi descrivere esattamente come si sono bloccati? Cosa ti dà in particolare il mal di testa? – Amadan

+1

Per favore, riduci il tuo codice solo alle cose che sono importanti per risolvere il tuo problema? – clentfort

risposta

2

È possibile calcolare la distanza levenshtein tra 2 stringhe:

Nella sua forma più semplice la funzione avrà solo la due stringhe come parametro e calcolerà solo il numero di operazioni di inserimento, sostituzione ed eliminazione necessarie per trasformare str1 in str2.

+2

Vuole contare il numero di caratteri corrispondenti, non la distanza di levenshtein. – js1568

+0

@ js1568, errore mio, dovrebbe usare testo simile invece – Tremmors

+0

Ciao grazie, similar_text() mi darebbe solo una percentuale non il numero esatto di caratteri corrispondenti giusto? – user1091883

9

Vedi http://www.php.net/manual/en/function.similar-text.php per come utilizzare similar_text($str1, $str2)

Questo vi darà il numero di corrispondenti caratteri in entrambe le stringhe.

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

vi darà 7 (il numero di caratteri in comune).

2

Prova questa

<?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); 
Problemi correlati