Bonjour,

Voilà après beaucoup de recherche je n'ai pas trouvé de solution simple (ne demandant pas 10 000 calculs) à mon problème, alors je demande ici :

Le truc c'est que j'ai 2 chaînes de caractères et j'aimerai savoir si oui ou non il y a plus de 2 caractères de différence. Pour vous aidez voilà quelques petits exemple ;

$str1 = 'Jean Paul';
$str2 = 'Jaen Paul';
// Il n'y a que le deuxième et troisième caractère qui diffère, il n'y a pas plus de 2 caractères de différences donc la fonction renvoidrai true
// -------------------------------------
$str1 = 'Bernart Dupuis';
$str2 = 'Bernar Depui';
// Il ne manque seulement que 2 caractères donc il n'y a pas plus de 2 caractères de différents donc la fonction renvoidrai true
// -------------------------------------
$str1 = 'Bernart Dupuis';
$str2 = 'Bernarte Dupuis';
// De même il y a un caractère de plus mais la fonction renvoidrai true

PS : Il n'y aura pas d'accent dans les 2 chaînes

5 réponses


Salut,
La comme ça, je dirais, tu décompose test chaines dans deux tableaux et tu compares les tableaux.
J'essaye !

Pour l'exemple 1 :

$str1 = 'Jean Paul';
    $str2 = 'Jaen Paul';
    $arr1 = str_split($str1);
    $arr2 = str_split($str2);
    $i=0;
    foreach ($arr1 as $k => $v) {
        if($v!=$arr2$k]){
            $i++;
        }
    }
    echo $i.' caractères différents';

Par contre, pour les deux autres, je crains qu'il ne faille passer par des regex. :/

Aureroy
Auteur

@Natà ça ne fonctionnera pas car si on rajoute un caractère après tous les caractères qui suivent seront comptés comme faux (dans le cas où on rajoute un caractère dans le début ou dans le milieu du nom/prénom)

Oui oui j'ai bien compris, c'est pour ça que j'ai bien précisé pour l'exemple 1
Après ,j'ai trouvé la fonction similar_text()
Ça te retourne un résultat en pourcentage, j'ai fait quelques tests ça m'a l'air pas trop mal.

$var_1 = 'Jean Paul';
$var_2 = 'Jaen Paul';
similar_text($var_1, $var_2, $percent); 
echo $percent; 
echo "<br>";
similar_text($var_2, $var_1, $percent); 
echo $percent; 
echo "<br>";
$var_1 = 'Bernart Dupuis';
$var_2 = 'Bernar Depui';
similar_text($var_1, $var_2, $percent); 
echo $percent;
echo "<br>";
similar_text($var_2, $var_1, $percent); 
echo $percent; 
echo "<br>";
$var_1 = 'Bernart Dupuis';
$var_2 = 'Bernarte Dupuis';
similar_text($var_1, $var_2, $percent); 
echo $percent; 
echo "<br>";
similar_text($var_2, $var_1, $percent); 
echo $percent;

Si $percent>85 alors elle te retournerai true.

Aureroy
Auteur

Oh merci je viens d'avoir une idée grâce à toi, il faut faire (nombre de caractères - 2) / nombre de caractères et ça donne un nombre entre 0 et 1 qui sera le pourcentage (pour 17 caractère c'est 88% par exemple).

Merci beaucoup tu viens de me débloquer :D