Fonction qui renvoie une chaine differentielle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 173 fois - Téléchargée 26 fois

Contenu du snippet

Voilà ne maîtrisant pas bien les expressions régulières et ayant parcouru en vain les fonctions de string du php à la recherche d'une fonction renvoyant la chaine differentielle de 2 chaines comparée ,je me suis lancé:

Source / Exemple :


<?php
function differential_str($refstr , $comparestr) {
  //on parcours la chaine de reference 
  $reflength=strlen($refstr);
  for ( $i=0 ; $i<$reflength && $refstr[$i]==$comparestr[$i] ; $i++ ){
  
  }  
  
  // si la totalité de la chaine est parcourue on continue sinon on retourne -1
  
  if  ( $i == $reflength ) { 
    $diff="";
    $complength=strlen($comparestr);
    //Boucle sur la chaine differentielle
    for ($j=$i ; $j < $complength ; $j++) {
      
      //$diff va stocker le surplus de la chaine comparée
      $diff .= $comparestr[$j];
      
    }
    
    if ($diff=="")
      return 0; //les 2 chaines sont identiques
    else return $diff;//la chaine differentielle
          
  }
  else return -1 ; //la chaine que l'on compare ne commence pas par la chaine de reference 

} 
echo ( differential_str("salut","salut les gars") );//retourne " les gars"
echo ( differential_str("salut","salut") );//retourne 1
echo ( differential_str("salut","rien à voir") );//retourne -1
?>

A voir également

Ajouter un commentaire

Commentaires

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Je n'ai pas dit que le code était pourri ;-)
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

ben ouais , comme ça c'est plutôt mieux, mais j'en avais besoin dans un cas précis quand les 2 chaines débutaient par le premier paramètre et je ne connaissais pas cette utilisation de substr_replace.Donc je m'étais arrêter à ce cas.
C'est vrai que 'chaine différentielle' est peut être une mauvaise dénomination. Enfin bon, voilà la fonction est postée et des fois y'a pire comme code.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

j'ai du mal avec ta fonction :

echo ( differential_str("salut","les gars : salut") );//retourne -1
echo ( differential_str("salut","hey, salut les gars") );//retourne -1

Bref, ta fonction ne fonctionne que si la chaîne $comparestr débute par $refstr.
Quel intérêt alors par rapport à une fonction comme strstr() ? A part que tu renvoie 1 ou -1 selon si les chaînes sont égales ou ne sont pas comparables ?
echo substr (strstr ('salut les gars', 'salut'), strlen('salut'));
fait la même chose que ta fonction.
Et même, si on suit ton raisonnement, faire un vrai différentiel entre 2 chaînes (on peut même ajouter la gestion de la casse facilement) :

<?php
function strDiff ($haystack, $needle) {
if (false !($pos strpos ($haystack, $needle))) {
$retour = substr_replace($haystack, '', $pos, strlen($needle));
if ($retour === '') {
return $retour = 1;
}
return $retour;
}
return $retour = -1;
}
echo strDiff ('hey, salut les gars !', 'salut'), '
'; // retourne 'hey, les gars !'
echo strDiff ('salut les gars', 'salut'), '
'; // retourne 'les gars'
echo strDiff ('salut', 'salut'), '
'; // retourne 1
echo strDiff ('rien à voir', 'salut'), '
'; // retourne -1
?>

Ou alors, je n'ai pas pigé le véritable but de ta source ;-)
Messages postés
193
Date d'inscription
mercredi 24 août 2005
Statut
Membre
Dernière intervention
3 juin 2016

Ok c'est vrai je vais modifier
Messages postés
455
Date d'inscription
mardi 17 septembre 2002
Statut
Membre
Dernière intervention
22 juillet 2007

Je sais bien, c'est bien pour ça que dans mon for, je le fais à l'initialisation :)
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.