RempLacer des caracteres par des images...

Eléphanteau du PHP | 23 Messages

20 oct. 2009, 22:16

Bonjour à tous,

Je cherche la solution la plus simple pour remplacer des caractères dans une chaine, par leur équivalents en image...
ainsi la chaine "rrw" contenue dans la variable $chaine doit être convertie en "<img src='r.gif'><img src='r.gif'><img src='w.gif'>"...

Comment dois-je m'y prendre ?

Merci d'avance pour votre aide...

ViPHP
fab
ViPHP | 2657 Messages

20 oct. 2009, 22:17

str_replace() ?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 23 Messages

20 oct. 2009, 22:22

J'ai pensé à str_replace()

Mais comment l'utiliser pour des caractères multiples ???

quelle serait la syntaxe ?

ViPHP
fab
ViPHP | 2657 Messages

20 oct. 2009, 22:43

C'est là même.... str_replace('totot','tata',$string)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphanteau du PHP | 23 Messages

20 oct. 2009, 22:54

J'ai oublié de préciser que la chaine "rrw" peut varier... En fait, elle provient d'un champ de bdd et peux contenir un nombre différents de caractères... C'est pour cela que je ne sais pas trop comment écrire cela avec str_replace()

ViPHP
fab
ViPHP | 2657 Messages

20 oct. 2009, 22:55

Bah tu mets une variable à la place de toto ou est le problème?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 oct. 2009, 23:51

Bonjour,

Personnellement je ferrais ça avec un for:
$variable="toto";
for ($i=0; $i<strlen($variable); $i++) {
     print "<img src='".$variable[$i].".gif' />";
}
Je n'ai pas testé ce code mais c'est pour donner l'idée...
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 23 Messages

21 oct. 2009, 08:46

Bon, si j'écris ceci :

Code : Tout sélectionner

$cost = str_replace('<img src="w.gif">','W',$invoc);
Alors que le contenu de $invoc est par exemple "2WW"... L'affichage de $cost reste "2WWW"

Qu'est-ce qui ne va pas ?

Eléphanteau du PHP | 23 Messages

21 oct. 2009, 08:51

Bonjour,

Personnellement je ferrais ça avec un for:
$variable="toto";
for ($i=0; $i<strlen($variable); $i++) {
     print "<img src='".$variable[$i].".gif' />";
}
Je n'ai pas testé ce code mais c'est pour donner l'idée...

Ca ne marche pas non plus et je pense d'ailleurs que cela ne peut pas convenir

J'ai écris ceci :

for ($i=0; $i<strlen($invoc); $i++)
{
print "<img src='".$variable[$i].".gif' />";
}
Mais l'affichage provoque 3 images manquantes... toujours avec $invoc = "2WW"
Car ce système doit traiter la chaine entière et non pas caractère par caractère...


HELP !

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

21 oct. 2009, 10:41

Bon, si j'écris ceci :

Code : Tout sélectionner

$cost = str_replace('<img src="w.gif">','W',$invoc);
Qu'est-ce qui ne va pas ?
Vérifie l'ordre des paramètres : http://php.net/str_replace
Ca ne marche pas non plus et je pense d'ailleurs que cela ne peut pas convenir
Soit tu penses mal, soit ta question de départ est mal formulée ;)
J'ai écris ceci :

for ($i=0; $i<strlen($invoc); $i++)
{
print "<img src='".$variable[$i].".gif' />";
}
Mais l'affichage provoque 3 images manquantes... toujours avec $invoc = "2WW"
Tu as fait le remplacement à moitié dans mon exemple...
$variable[$i] devient $invoc[$i]
Car ce système doit traiter la chaine entière et non pas caractère par caractère...
Si tu veux obtenir quelque chose du genre : "<img src='r.gif'><img src='r.gif'><img src='w.gif'>" alors le plus simple est de traiter ton texte caractère par caractère pour ajouter les balises qui vont bien.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 23 Messages

21 oct. 2009, 12:47

Ok, ça fonctionne partiellement avec ceci :

Code : Tout sélectionner

for ($i=0; $i<strlen($invoc); $i++) { @$cost = "<img src='".$invoc[$i].".gif' />"; }
MAIS....

si par exemple $invoc = "3WW"

$cost ne me retourne que <img src="W.gif''> et non <img src="3.gif''><img src="W.gif''><img src="W.gif''>

Un truc doit clocher... Mais je ne comprends pas le fonctionnement du "for"... HELP :priere:

Eléphanteau du PHP | 23 Messages

21 oct. 2009, 13:22

Après une vérification rapide,

Code : Tout sélectionner

print "<img src='".$invoc[$i].".gif' />";
Affiche bien <img src="3.gif"><img src="W.gif"><img src="W.gif">

Mais si je transfert le résultat de remplacement dans ma variable

Code : Tout sélectionner

$cost = "<img src='".$invoc[$i].".gif' />";
on dirait que ça ne prend qu'un caractère (le dernier je pense)...

Comment faire pour bien transmettre toute la chaine d'images ?

ViPHP
fab
ViPHP | 2657 Messages

21 oct. 2009, 15:05

Avant la boucle tu fais
$cost = '';
et dans la boucle
$cost .= "<img src='".$invoc[$i].".gif' />";
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 369 Messages

21 oct. 2009, 15:43

Salut,
Bonjour à tous,
Je cherche la solution la plus simple pour remplacer des caractères dans une chaine, par leur équivalents en image...
ainsi la chaine "rrw" contenue dans la variable $chaine doit être convertie en "<img src='r.gif'><img src='r.gif'><img src='w.gif'>"...
Comment dois-je m'y prendre ?
Merci d'avance pour votre aide...
Pourquoi ne pas faire ainsi?
J'ai l'impression que vous vous enquinez pour pas grand chose les gens.
<?php
  // Pattern de recherche
  //
  $pattern = "#([\w])#Umis";

  // Chaine en exemple qui peut être n'importe quel char, Attention: ne peut marcher si
  // tu cible plus d'un caractère.
  //
  $string = "azer";

  // Lance le remplacement
  //
  $res = preg_replace($pattern, "<img src=\"$1\" alt=\"Titre de l'image : $1\" />", $string);

  // Affichage le résultat
  //
  echo $res;
?>
Fait et testé, ca marche mais différents points à controller avant une mise en prod sèrieuse.
Désolé, je n'ai que survolé le topic, si une solution identique ou aprochante a été posée: Autant pour moi ;)

@+ bon code ;)