Fonction qui renvoie une chaine differentielle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 126 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

malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Je n'ai pas dit que le code était pourri ;-)
guill76
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.
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
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 ;-)
guill76
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
Naixn
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 :)

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.