{PHP}

Fermé
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 - 3 sept. 2009 à 03:29
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 - 3 sept. 2009 à 20:47
Bonjour,

J'Ai deux variable. Dison pour l'exemple :

$v1 = "11111111";
$v2 = "11111211";


J'aimerais pouvoir afficher la deuxième variable avec les différence en rouge.

Malheureusement, je n'ai absolument aucune idée du comment faire ça.

Je vous remercie de votre aide précieuse!

Jeremy

4 réponses

Jibe555 Messages postés 59 Date d'inscription mercredi 2 septembre 2009 Statut Membre Dernière intervention 4 novembre 2009 19
3 sept. 2009 à 03:44
$final = "";
for ($i = 0; $i< strlen($v1); $i++)
{
   if ($v1[$i] != $v2[$i])
      $final = $final . "<font color="red">".$v2[$i]."</font>";
   else
      $final = $final . $v2[$i];
}


Ce code n'est pas optimal car il répète les balises si plusieurs caractères sont successivement différents.
Il part également du principe que $v1 et $v2 sont de même longueur.

Mais ça peut être une piste...
0
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 1
3 sept. 2009 à 06:57
Merci beaucoup. et surtout, merci d'avoir précisé les limitations! Je vais essayer ca, je t'en donne des nouvelles :)

Bonne nuit! (Ici il est 00:56 :P )
0
Bonjour Jeremy_me et Jibe,
Jibe a répondu, et j'ai joué à faire + joli (pas de répétition de balises)
<HTML>
<HEAD>
  <TITLE>Page essai PHP</TITLE>
</HEAD>
<STYLE>
  SPAN.V {color: #00ff00}
  SPAN.R {color: #ff0000}
</STYLE>
<BODY>
<H1>Petite page de comparaison de deux chaines en PHP</H1>
Nous sommes le <?php echo Date("j/m/Y"); ?>
<P>
<?php
  // Un petit tableau pratique pour les couleurs à afficher :
  $styleVertEtRouge = Array('V', 'R');

  $var1 = "11111111";
  $var2 = "11123141";
  // En principe, on devrait aussi penser au cas ou les 2 chaînes n'on pas la même taille
  // ce qui n'est pas fait ici (c'est un cas d'école)
  $s1 = strlen($var1);
  $s2 = strlen($var2);

  echo "Comparaison de deux chaines :" . $var1 . " et ";

  // On doit différencier le cas du départ à caus du premier span, donc on prend -1
  $precedant = -1;
  $courant = -1;

  for ($i = 0; $i < $s2; ++$i)
  {
    if ($var1[$i] == $var2[$i])
    {
      $courant = 0;
    }
    else
    {
      $courant = 1;
    }
    if ($courant != $precedant)
    {
      if ($precedant != -1)
      {
        // ne doit pas être fait la première fois
        echo "</span>";
      }
      // écrit le caractère dans la bonne couleur
      echo "<span class=" . $styleVertEtRouge[$courant] . ">" . $var2[$i];
      $precedant = $courant;
    }
    else
    {
      echo $var2[$i];
    }
  }
  echo "</span><P> terminé";
?>
</BODY>
</HTML>

Voici le code que ça génère :
<HTML>
<HEAD>
  <TITLE>Page essai PHP</TITLE>
</HEAD>
<STYLE>
  SPAN.V {color: #00ff00}
  SPAN.R {color: #ff0000}
</STYLE>
<BODY>
<H1>Petite page de comparaison de deux chaines en PHP</H1>
Nous sommes le 3/09/2009<P>
Comparaison de deux chaines :11111111 et <span class=V>111</span><span class=R>23</span><span class=V>1</span><span class=R>4</span><span class=V>1</span><P> terminé</BODY>

</HTML>
0
Jeremy_me Messages postés 31 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 24 septembre 2009 1
3 sept. 2009 à 20:47
Bonjour Java4ever!

Wow, merci beaucoup pour ce script! C'est génial!

Pour ce qui est de la longueur, en faite, si les deux chaines n'ont pas le même nombre de caractères, une erreur va s'afficher.

Je vous dit merci à tout les deux ;)

Bonne soirée!

ET MERCI ENCORE!!
0