FONCTION QUI PERMET DE CONVERTIR DES CODES EN SMILEYS

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 30 mai 2005 à 21:06
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 12 janv. 2006 à 20:20
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31716-fonction-qui-permet-de-convertir-des-codes-en-smileys

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
12 janv. 2006 à 20:20
tu veux une réponse optimisée pour la vitesse ? si oui, alors relis les commentaires qu'on met généralement sur les doubles quotes... le reste, c'est négligeable...
lOeil Messages postés 23 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 25 mars 2009
11 janv. 2006 à 18:01
Bonjour, je voulai avoir votre avis:
Faut-il ajouter dans les deux tableaux les elements de bbcode a convertir, ou vaut il mieux différencier les fonction : 1 pour les smiley, et une autre pour le bb code.
Sinon j'ai un petit pb:
---------------------------------------------------------------------------
<?php

function textToSmileys ($texte, $CodeSmileys, $ImgSmileys)
{
$texte = str_replace($CodeSmileys,$ImgSmileys,$texte);
echo $texte,"
\r\n";
}

$repertoire = 'images/smileys/' ;

$texte = 'le texte de votre page :) :P ;)'; //ici, mettez le texte de votre page entre les ' '

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array("","","","","","","","");


textToSmileys( $texte , $smileys , $img );

echo $texte,"
\r\n"; //ici,on fait l'affichage du texte apres avoir changé les codes en smileys

?>
-----------------------------------------------------------------------------


Quand je fais: echo $texte,"
\r\n"; dans la fonction je voi bien les smiley mais pas en dehors de la fonction :/
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
9 juin 2005 à 18:25
oui vu que t'as le i dans l'expression régulière (si)

le i c'est pour la casse

documente toi un peu ...
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
9 juin 2005 à 17:59
Ok merci, est-ce que ca fonctionne si on les met en majuscules ? genre ???
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 juin 2005 à 19:05
bon on va lui dire parce que sinon il va continuer à flooder :

ça recherche les occurences entre et et ça remplace par des ...

Bref c'est pas plus compliqué...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
8 juin 2005 à 18:23
google : expreg
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
8 juin 2005 à 18:20
Vous pouvez me dire qu'est-ce que cette fonction fait et expliquez-moi comment l'utiliser :
<?php
// Bloc des balises -
$chaine = preg_replace('#\(.+?)\#si','$1',$chaine);
?>
Merci de me dire c'est quoi qu'elle fait et comment l'utiliser.
Merci d'avance !
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
8 juin 2005 à 18:14
cs_bloom1 Messages postés 328 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 8 mars 2007
8 juin 2005 à 18:13
Vous pouvez me dire qu'est-ce que cette fonction fait et expliquez-moi comment l'utiliser :
<?php
// Bloc des balises -
$chaine = preg_replace('#\(.+?)\#si','$1',$chaine);
?>
Merci de me dire c'est quoi qu'elle fait et comment l'utiliser.
Merci d'avance !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 21:33
La solution la plus rapide c'est ça :

$chaine=str_replace(array('machin','truc','chose'),array('truc','machin','chose'),$chaine);

tu peux tester ce que tu veux je pense pas que t'auras plus rapide.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 juin 2005 à 21:30
moi, je n'ai pas critiqué les personnes qui parlaient de la source, j'ai seulement critiqué la source...

Imagines que tu ai besoin d'appeler cette fonction sur un texte de 30 mo (pour ensuite, archiver des convers), évidement, c'est un truc que tu ne feras qu'une fois tout les deux ans, mais c'est génant de devoir attendre deux minutes pour avoir le résultat...

ce genre de fonction sert pour gérer du BBcode, comme tu le vois, on peut troller pendant des heures sur une toute petite source pour finalement écrire bcp...

Quand on voit un code de quelques lignes vraiment mal écrit, on ne peut pas dire que c'est corect ! Perso, quand je poste un code aussi court, je m'arrange pour qu'il soit corectement programmé...

pour moi, il n'y a pas de compromis à faire, les commentaires existent, et si on doit faire quelquechose pour la lisibilité, ce n'est pas le refus de l'optimisation, c'est l'ajout de commentaires...

Je n'ai pas huit ans d'expèriences (en prog, que ça soit en pro ou en amateur), mais ça ne change rien, on ne juge pas qqn sur son age, ni sur ses années d'études, (enfin, on ne devrait pas), on juge qqn sur ce qu'il sait faire et connais...

Je suis amateur, et j'ai tout mon temps, quand on commence qqch, avant de le poster, on le finit ! Le code posté ici aurait pu être copié d'un tuto, si je ne t'aprends rien, c'est simplement que tu ne veux pas apprendre à optimiser...


en tout cas, faites des benchs et marrez vous, la solution actuellement proposée n'est pas terrible niveau lisibilitée (tout sur la même ligne), et est loin d'être la plus rapide...

j'envoi mon fichier de benchs à toutes les personnes qui me le demandreront par mail :
coucou747 at hotmail.com

ma solution est plus lisible et plus rapide...
ça devient un troll géant ici, alors je me retire, et je persiste, pour la lisibilitée, faut ajouter des commentaires, mais pas torturer l'optimisation !
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 18:55
ouais
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
6 juin 2005 à 18:53
C'est clair, sa tombe bien que tu parle de passion que je suis en train de rédiger un commentaire littéraire sur Andromaque et c'est la passion qui à fait mourir Oreste ...
OUps je divague ;-)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 18:51
ouais... comme quoi 10 lignes de code peuvent déchaîner les passions.
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
6 juin 2005 à 18:48
Lol tout sa pour un pauvre script convertisseur, les gars c'est incryable !

-----------------
http://fg.logiciel.free.fr
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
6 juin 2005 à 18:45
je me suis trompe sur ma date de naissance? je suis ne en 1968

et d'accord avec toi, je me suis laissé emporter. Desolé
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
6 juin 2005 à 18:39
originalcompo --> "2: désolé de te paraitre PITOYABLE; j'ai pourtant 8 ans de boulot en entreprise (et oui, je deviens vieux), et je te prie de croire que l'optimisation j'en fais à longueur de journée." tu aurais 8 ans, tu ne ferais pas de l'optimisation a longueur de journee puisque tu dois normalement etre a l'ecole...

2) marre des dispute dans les commentaires sur les sources... areter bordel, sa vous change quoi? si vous voulez vous disputez faites-le par message prive et venez pas faire chier seux qui on posté une source a metre des commentaires qui n'ont rien a voir avec la source...

PS: merci a tous pour la note TRES simpatique que vous avez mi :(
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
6 juin 2005 à 17:48
Toi Coucou747, t'es surement un géni de la programmation, mais de toutes évidence, tu as l'air de pas encore savoir très très bien lire...

1: j'ai SEULEMENT dis et REdis et REREdis que l'optimisation n'est PAS TOUJOURS à privilégier. Notemment sur UN exemple. Point.

2: désolé de te paraitre PITOYABLE; j'ai pourtant 8 ans de boulot en entreprise (et oui, je deviens vieux), et je te prie de croire que l'optimisation j'en fais à longueur de journée.
A la fois au niveau de bases de données et au niveau du code.
(oui, je suis un peu vexé)
Mais sur un projet de 250000 lignes de codes, je me pose pas la question si une boucle qui tourne sur 10 éléments maximums et qui n'est appelée que lorsqu'on clique sur un bouton peut etre optimisée...

3: Je sais pas où t'as lu que je voulais enlever les tableaux, mais si j'ai ecris ca, y'a un magicien qui a dû l'enlever du forum...

4: je vois pas pourquoi tu veux absolument generaliser l'optimisation a outrance dans tous les cas? Pour avoir le plaisir de pouvoir dire à chaque nouveau programme fait par chaque débutant "c'est lent, ca ira plus vite si tu met xxx à la place de yyy" ?? T'as des phrases toutes faites que tu re-utilise ?

Moi, si j'avais ton expérience, je ferais un tutorial qui rassemble un grand nombre d'astuces d'optimisations, et lorsque je jugerais un programme correct, je dirais:
c'est pas mal, mais vas voir http://mapage tutorial, tu pourras "largement" optimiser ton source
...je trouve que ce serait plus positif...

POUR FINIR: j'ai dit que c'etait un POINT DE VUE... d'accord tu as le droit de le trouver PITOYABLE, moi ca me DESOLE parceque je te trouve BORNE

Et j'ai vu ton code de fractale... je trouve ton code clair, y'a rien à redire... et 90% du code est une formule mathématique récursive, donc je vois pas comment on aurait pu l'écrire autrement, et surtout où tu l'as optimisé.

Ah si! tu bouffes une memoire $pi à chaque appel de la fonction, alors que si tu l'avais fait globale, ca aurait occupé de la memoire en moins sur le serveur (ah moins que l'instruction global fasse perdre du temps?)
Même chose pour le tableu $color que tu passes en parametre.

En delphi (je sais pas en php), mais plus t'as d'arguments dans une fonction, plus son appel est lent...

En tous cas, pour moi, c'est pas un exemple qui prouve que l'optimisation est importante, vu que le programme peut pas être écrit autrement, ou presque...

Salut!

ps: j'ai eu plein de critiques sur un source php que j'ai posté, et elles ont toutes ete constructives et m'ont permis de l'ammeliorer... sauf les tiennes.
Des reponses comme "non, c'est pas ca", où il faut te demander(supplier?) pour avoir une reponse alors que c'etait tout simple de se la jouer un peu plus humble et de dire "non c'est parceque..."... et bien je peux m'en passer.

Si t'es fatigué des nouveaux qui postent, prends des vacances...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 17:25
lol
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 juin 2005 à 17:23
Lol,

=> jdalton42, au lieu de raler, tape "conversion texte smiley" et autres trucs dans le genre dans google... tu verras que ca fait une sacree "pub" a ta source, ces petits echanges ;-)
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
6 juin 2005 à 17:15
et ho c bon areter de poster differente source...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 juin 2005 à 17:13
pas de bol, j'aime discuter ;-)

=> les 2 tableaux n'étaient pas identiques, l'un contenait (et contient, voir mails plus haut) le chemin où se trouve les images, et l'autre non.
Bah oui, je dis juste qu'on pouvait utiliser ce chemin (plus simplement d'ailleurs), sans boucler sur le str_replace()

=> Tu dis que le probleme c'est le 'for' ... y'a une difference entre le foreach que tu utilise et le for qui a ete fait ???
Je ne boucle pas sur str_replace(), je boucle sur mon tableau d'images pour y ajouter le chemin que tu voulais sortir a des fins de plus grande praticite (ce avec quoi j'etais d'accord).

=> Bon, en fait, en relisant, j'ai compris: la difference, c'est que tu fais la concatenation dans le for et apres 1 str_replace au lieu de n str_replace dans le for.
Donc je pense que ca satisfaira au moins partiellement ceux qui on critiqués les n str_replace
Voila ;-)

=> ps1
franchement, je n'en sais rien, comme je te l'ai dit, je fais confiance aux codeurs de php, c'est leur boulot, pas le mien...:-) Mais si tu es persuade du contraire, je n'ai pas de raison de ne pas te croire, en fait. Donc ok, pourquoi pas. Un bench confirmerait ou informerait, mais heu franchement...je m'en tape lol. Ca reste plus lisible pour moi d'utliser des tableaux dans str_replace() quand on le peut, que de boucler dessus (ca fait 1 ligne en moins, au moins).

=> ps2
No comment, j'ai deja donne mon avis la-dessus : je m'en fous, lol. Je ne cours pas particulierement apres la rapidite...mais bon, si cela reste simple et clair de gagner qques micros secondes, je ne vais pas m'en priver non plus, ce sera stupide.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 16:55
"c'est pitoyable de voir des gens qui sont satisfait quand ils programment des trucs lents !"

C'est surement parce qu'ils ne savent pas coder autrement, ils ont appris sur des sites tel que siteduzero ou phpdebutant, donc en même temps c'est normal, ce serait plutôt à nous d'arrêter de leur conseiller ce genre de sites pour apprendre. La doc php est autrement plus fournie et de meilleure qualité.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
6 juin 2005 à 15:18
vas sur ma source echec, ou ma source fractale, tu comprendras à quoi sert l'optimisation !

c'est pitoyable de voir des gens qui sont satisfait quand ils programment des trucs lents ! Franchement, le php est interprété, c'est déja assez lent comme ça !

Fonctions récursives + interprété = lenteur...

de plus, ici, ce n'est pas une question de lisibilitée ! Un tableau est lisible, et si on doit enlever les tableaux de tout nos programmes pour éviter d'être illisbles, alors que fait-on des objets ???
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
6 juin 2005 à 12:16
Zut, j'ai l'air d'un politicien, moi, maintenant! voila que je re-ecris !!!

Bon, a part ca, pour le 1) et 2):
les 2 tableaux n'étaient pas identiques, l'un contenait (et contient, voir mails plus haut) le chemin où se trouve les images, et l'autre non.
Tu dis que le probleme c'est le 'for' ... y'a une difference entre le foreach que tu utilise et le for qui a ete fait ???

Bon, en fait, en relisant, j'ai compris: la difference, c'est que tu fais la concatenation dans le for et apres 1 str_replace au lieu de n str_replace dans le for.
Donc je pense que ca satisfaira au moins partiellement ceux qui on critiqués les n str_replace

Pour le 3): je n'ais plus trop envie de me relancer là dedans, mais je te fais confiance, si tu as reussi a regrouper les envies de tout le monde (code plus rapide tout en restant souple), alors tant mieux je classe donc dans l'ordre de préférence:
ta méthode, celle que j'ai défendu... et les autre!

ps1: "Les createurs de php se sont charges d'optimiser le moteur php...du moins, doit on leur faire confiance a ce sujet. Si str_repace() peut prendre des tableaux en parametre, j'ose esperer que c'est parce que, lorsque on doit faire plusieurs str_replace(), cette 1ere solution est plus rapide..."
sur cet exemple precis, espère, espère... je suis sûr que non, parceque mathématiquement, je ne vois pas comment on pourrait faire (je ne suis pas un dieu, loin de là, j'ai dejà oublié 3/4 de ce que j'ai appris en fac, mais j'ai quand même un bac +5 en math/info au départ et l'algorithmie à fait partie des modules que j'ai dû me farcir...).

ps2: je sais meme plus diviser, c'est un gain de 0.00139 seconde pour 1000 iterations, soit au bout de 1000 personnes connectés affichant un tableau de 1000 lignes, 1 seconde de gain à répartir entre tous les utilisateurs... lol
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
6 juin 2005 à 09:48
Hello,

Originalcompo => je suis plutot d'accord avec toi pour ce qui concerne la rapidite des scripts php. J'ai du mal a concevoir que quelques micros secondes gagnees sont si importantes que ca a l'echelle a laquelle la plupart d'entre nous travaillons; meme si le point de vue d'Antho se defend : cela reste quand meme toujours ca de gagner...et sans doute, si sur un meme serveur mutualise tout le monde optimisait, verrait-on un petit gain. Mais je n'en reste pas moins d'accord avec toi : il n'est franchement pas interessant de sacrifier la lisibilite du code a la vitesse, particulierement dans le milieu professionnel. Je precise que j'evolue dans ce milieu depuis un certain temps deja.
Pourtant, j'ai vraiment du mal a suivre ton raisonnement sur le 2d code d'Immortal PC...je l'ai lu et relu...et si je devais reprendre un code avec un de ces deux petits bouts ci, le 1er m'irait bien mieux. . Il comporte deux tableaux (c'est tout aussi clair que le second code ...2 tableaux aussi), et un str_replace() dont, lorsqu'on connait comment elle marche, la fonction devient alors evidente. Dans le 2d code, on boucle sur le str_replace(). Je reprends tes points 1 par 1 pour m'expliquer :
1) meilleure visibilité du tableau si on veut checker les correspondances code :
Ah ? Dans les deux codes, les tableaux sont strictement identiques.

2) plus grande souplesse si on veut changer un truc tout simple comme le répertoire d'origine
la non plus je ne vois pas...dans les deux cas, la solution est identique. Simplement, dans le 1er cas, il a sorti le repertoire...ce qu'il aurait pu, et du, faire dans le second aussi. Voire en faire une fonction pour pour passer le repertoire en parametre. Mais je ne pense pas qu'il faille juger ses codes la-dessus : le probleme vient de la boucle ou non. Le repertoire est un detail, puisque dans les deux cas, il aurait pu utiliser la meme methode. Et je pense qu'il s'agissait dans le 1er cas juste d'un oubli, et d'une "optimisation" dans le second.
Ceci dit, oui, sortir le repertoire est une meilleure idee, effectivement.

3) je ne vois pas pourquoi faire 4 str_replace tout seul serait plus lent que les faire dans une boucle.
il y a deja eu une reponse, a laquelle j'adhere. Les createurs de php se sont charges d'optimiser le moteur php...du moins, doit on leur faire confiance a ce sujet. Si str_repace() peut prendre des tableaux en parametre, j'ose esperer que c'est parce que, lorsque on doit faire plusieurs str_replace(), cette 1ere solution est plus rapide...

Pour ta solution...bah c'en est une parmi tant d'autres. Mais je pense que creer une fonction et passer en arguments 2 tableaux et une chaine contenant le repertoire reste bien plus efficace et bien plus lisible.

Bref, voici ce que je ferais (sans avoir optimise non plus ;-) Il y a sans doute une fonction en php qui peut remplacer ma boucle ) :

<?php

function textToSmileys ($texte, $arrCodeSmileys, $arrImgSmileys, $repImg) {
foreach ($arrImgSmileys as $clef => $image) {
$arrImgSmileys[$clef] = $repImg.$image;
}
$texte = str_replace ($arrCodeSmileys, $arrImgSmileys, $texte);
return $texte;
}

$texte = 'le texte de votre page :) :P ;)';
echo $texte,"
\r\n";

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('smile.gif','razz.gif','wink.gif','snif.gif','evil.gif','thumleft.gif','affraid.gif','mdr.png');
$rep = 'img/smileys/';

$texte = textToSmileys ($texte, $smilleys, $img, $rep);

?>
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
6 juin 2005 à 08:52
Bah écoute quand tu paieras ton hébergement ou quand tu auras un nombre élevé de visiteurs, tu verras que les quelques millisecondes gagnées par visiteur te seront vachement utiles.
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
6 juin 2005 à 08:47
"bah tu as des sources sur ce site te permettant de faire un bench. Cherche bien. C'est sûr que l'optimisation ne dépassera pas la seconde, mais c'est pour le principe."

je crois que j'ai mal lu là, non?
J'ai parlé dans le vent, où alors j'ai pas lu le mode d'emploi et code-sources est un site spécialisé et réservé aux optimisateurs?

Depuis le début, le seul message/conseil que j'ai voulu faire passer, c'est que parfois préférer une solution à une autre ne doit pas forcément être influencé par la rapidité du code, à plus forte raison si le gain se calcule en nanaosecondes...

J'ai défendu un script dans ce sens, parceque le commentaire
"solution est crade" était à mon sens totalement injustifié par rapport aux avantages que j'y voyais...

Si "c'est sur que l'optimisation ne dépassera pas la seconde", je laisse tomber, on parle pas le même langage... je reviendrais faire un commentaire sur les forums php dans quelques années ;-)

ps : j'ai quand même jetté un coup d'oeuil sur un script de bench, qui plante chez moi sur
$this->code=strtr($code,$tableau);
peut être ma version locale de php ? (4.3.3 ?)

Quoi qu'il en soit, je vais l'étudier histoire de me mettre à l'objet sur php

Par contre, je suis aussi tombé sur un site dont vous donniez le nom
http://www.vulgarisation-informatique.com/optimiser-php.php
et je suis un peu tombé sur le cul...
je prends un exemple au hasard: on apprend que concaténer dans un echo avec des cotes fait gagner 139 ms, soit 0,139 seconde sur ... tenez vous bien... 100000 itérations ???

S'il y'en a qui ont déjà fait des pages php qui ont besoin de faire ne serais-ce que 1000 itérations avec un echo... chapeau !!

Sur un affichage qui va durer 20 secondes, ils vont gagner 0.0139 seconde par rapport à celui qui a pas mis de côtes...

J'avoue que l'intérêt me dépasse (à part d'un point de vue purement intellectuel et curieux)...

Allez, c fini, je poste plus, promis...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 juin 2005 à 11:04
bah tu as des sources sur ce site te permettant de faire un bench. Cherche bien. C'est sûr que l'optimisation ne dépassera pas la seconde, mais c'est pour le principe.
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
5 juin 2005 à 10:41
ok, je vais tester et je vous tiendrais au courant, mais faudra patienter, je connais pas les fonctions qui gèrent les dates...
Je reconnais que la différence entre les 2, c'est que les boucles en php sont interprétées alors que les fonctions du php sont compilées, donc bien plus rapides, mais si sur une boucle de 500 on trouve pas 1 seconde de différence, pour ce programme de smiley où ca ne depassera probablement jamais la centaine, alors ce sera clair que l'optimisation n'est pas réelle, sinon je me serai planté royalement sur ce cas que je défends (tout dépend maintenant de la manière dont l'interpréteur php a été programmé. C'est sur que s'il est de la même qualité que les premiers visual basic, j'ai du soucis à me faire ;-) )

A+ (mais pas aujourd'hui)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 juin 2005 à 10:21
"Donc je persiste et signe: 1 str_replace sur un tableau de 1000 elements ou une boucle de 1000 str_replace sur une chaine, c'est exactement la même chose (au 1000ieme de seconde près gagné par le fait que le for est programmé en interne dans str_replace)."

mouais...

Bah comme l'a dit coucou, fait un bench et reviens après :-)
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
5 juin 2005 à 09:26
t'oublie le fait que l'un est programmé en C et l'autre est programmé en php...
de ce fait, le tableau est plus rapide... fais des tests...
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
5 juin 2005 à 08:59
Juste un dernier truc et je vous lache...
essayez le code suivant:

$a1=array('ab', 'bc', 'cd', 'XZ');
$a2=array('X' , 'Y' , 'Z' , 'i');
$t= str_replace($a1, $a2, 'abcd');
echo $t."
\r\n";

Le résultat c'est: i
Il suffit de réfléchir pour comprendre que str_replace est programmé de manière interne par une bête boucle qui appelle n fois la fonction sur un tableau à 1 dimension (sur une chaine quoi). De toutes les facons y'a pas
d'autre algorithme qui permettent de faire ca, il faut bien faire les remplacements dans un certain ordre.

Donc je persiste et signe: 1 str_replace sur un tableau de 1000 elements ou une boucle de 1000 str_replace sur une chaine, c'est exactement la même chose (au 1000ieme de seconde près gagné par le fait que le for est programmé en interne dans str_replace). str_replace a été programmé pour accepter les tableaux dans le but de nous simplifier l'écriture, pas parcequ'ils ont trouvés l'algorithme du siècle qui fait gagner du temps !

Donc vous pouvez mettre toutes les boucles que vous voulez si ca vous apporte quelque chose (ici, dans l'exemple que je défendais, c'était pouvoir construire un tableau de noms d'images, sans y rajouter systématiquement le chemin).

N'oubliez pas un truc quand vous "optimisez" du code: si elle vous empêche de faire quelque chose, demandez vous toujours si l'optimisation est réelle, et quelle est son coût...

a+
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
5 juin 2005 à 02:01
Pour Anthomicro:
En fait, je répondais à ta phrase exacte qui était
"La deuxième solution est crade et encore plus lente que les différents str_replace tous seuls"
donc j'ai compris que tu comparais bien n str_replace écris en dur avec une boucle de n str_replace

Maintenant, c'est un détail, si c'est pas ce que tu voulais dire, autant pour moi, je suis d'accord pour dire que 1<n !!!

Quand à la boucle, je n'ais pas dit qu'elle était plus simple à lire qu'un ou n str_replace ou autre, j'ai juste dit qu'elle permettait d'ecrire du code plus générique.

Quand je parlais de simplicité à lire, je parlais d'un point de vue général, parceque c'est un point que les jeunes qui commencent dévellopent pour le fun ont du mal à voir et qui est très important dans la "vrai vie", c'est à dire dès qu'on sort d'un projet perso pour travailler dans une entreprise. C'était un conseil en passant, vous en faites ce que vous voulez, en tout cas, l'expérience m'a montré que l'optimisation à tout prix est souvent pénalisante à long terme, même lorsque le code est commenté.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
4 juin 2005 à 18:57
"3) je ne vois pas pourquoi faire 4 str_replace tout seul serait plus lent que les faire dans une boucle."

Parce que pour faire la boucle il te faut une opération supplémentaire. Ensuite il ne faut pas en faire 4, mais un seul avec deux tableaux. Et concernant la relecture ultérieure, je ne vois pas en quoi deux tableaux assortis de commentaires genre :

//rechercher
$rechercher=array('machin','truc','chose');

//remplacer
$remplacer=array('truc','machin','chose');

$chaine=str_replace($rechercher,$remplacer,$chaine);

seraient plus compliqués à relire qu'une boucle... (bien au contraire)
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
4 juin 2005 à 18:54
variante: les 4 lignes du milieu peuvent être remplacées par

$imgligne =$prefixe.implode($img, ';'.$prefixe);
$imgligne = str_replace(';', $suffixe.',', $imgligne);
$img =explode(',', $imgligne);
originalcompo Messages postés 65 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 9 octobre 2007 1
4 juin 2005 à 18:35
Juste pour répondre à la remarque de Anthomicro
"La deuxième solution est crade et encore plus lente que les différents str_replace tous seuls.
La première est meilleure"

Je ne suis pas d'accord du tout. L'avantage de la 2ieme méthode d'ImmortalPC est d'un point de vue "monde du travail" bien meilleure:

1) meilleure visibilité du tableau si on veut checker les correspondances code/icone
2) plus grande souplesse si on veut changer un truc tout simple comme le répertoire d'origine
3) je ne vois pas pourquoi faire 4 str_replace tout seul serait plus lent que les faire dans une boucle.
4) sinon voici une alternative si vous voulez absolument éviter les boucles : je ne pense pas quelle soit bien meilleure que celle avec la boucle for, mais ca m'a amusé de chercher...

(Petit préambule:
le code n'est pas optimisé, je débute en php, et de toutes les facons, les raccourcis imbitables hérités du C++ et super dur a debugguer 3 mois plus tard quand on a oublie le code ou lorsque celui-ci doit etre repris par quelqu'un d'autre, ca ne m'interesse pas vraiment: quand vous travaillez pour une societe, le code que vous produisez est souvent un morceau de quelque chose qui doit s'imbriquer dans quelque chose de plus grand, et qui sera surement modife un jour par une tierce personne parceque vous aurez quitte la boite ou parceque vous serez occupé à autre chose. Alors ecrire en 2 lignes ce que vous pouvez faire en 5 de manière plus lisible, si vous gagnez pas 1/4 de seconde, c'est du futur temps perdu. L'optimisation n'est a privilégier que si vous travaillez sur de grandes quantités de données... encore que pour une page web, j'avoue que ce n'est pas tout à fait la même chose que pour un programme Delphi ou C++)

<?php
$texte = 'le texte de votre page :) :P ;)';
echo $texte,"
\r\n";

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('smile.gif','razz.gif','wink.gif','snif.gif','evil.gif','thumleft.gif','affraid.gif','mdr.png');

$prefixe ='';

$imgligne =$prefixe.implode($img, ';'.$prefixe);
$img =explode(';', $imgligne);
$imgligne =implode($img, $suffixe.';').$suffixe;
$img =explode(';', $imgligne);

$nb_smileys = 0;

$texte = str_replace($smileys, $img, $texte);
echo $texte,"
\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 juin 2005 à 19:01
Pourquoi utiliser toutes ces fonctions alors qu'une seule suffit, avec deux arrays (un seul str_replace). C'est plus concis, plus propre, plus rapide et si y'a une ou deux redondances on va pas en mourir lol
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 juin 2005 à 10:44
Comme tu dis lol ;-)

Et puis vraiment, la solution de Kurt67 est vraiment imbuvable! IL faudrait voir a utiliser array_search () plutot...et in_array ()
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
2 juin 2005 à 10:40
ouais c'est sûr, enfin bon...
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 juin 2005 à 10:33
Oui mais ca va faire des redondances avec ce systeme, c'est vrai.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juin 2005 à 19:47
bien sur que si, t'as juste à ajouter qqch dans le tableau...
kurt67 Messages postés 48 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 4 avril 2007
1 juin 2005 à 18:26
oui mais le problême c'est qu'on ne peut pas définir plusieurs chaines différentes à reconnaitre pour un même smiley ?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juin 2005 à 17:40
Beurk...

Une solution simple et efficace :

un ou deux arrays, et ensuite un seul str_replace.
kurt67 Messages postés 48 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 4 avril 2007
1 juin 2005 à 17:37
woups dsl :
function smile_it($texte,$array) {

foreach ($array as $key => $val) foreach ($array[$key] as $key2 => $val2) if (($key2 != 0) && ($key2 != 1)) $texte = str_replace($val2, "", $texte);
return $texte;

}
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 juin 2005 à 15:37
A ce compte la, autant faire ca :

<?php

$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
echo $texte,"
\r\n";

$smileys = array( ':)'=> 'youpie.gif',':P' => 'yeahh.gif' ,';)'=> 'clin_doeil.gif' );
$texte = str_replace (array_keys ($smileys), array_values ($smileys), $texte);
echo $texte;

?>
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
1 juin 2005 à 15:20
Pourquoi ne pas faire un tableau associatif ?

<?php
$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
echo $texte,"
\r\n";

$smileys = array( ':)'=> 'youpie.gif',':P' => 'yeahh.gif' ,';)'=> 'clin_doeil.gif' );
foreach ($smileys as $key=>$val) {
$texte = str_replace($key,$val,$texte);
}
echo $texte,"
\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 juin 2005 à 09:09
Ouais,

la 1ere valeur est l'imge, la seconde sans doute le alt de l'image, et le reste, les "smileys" possibles, je suppose. Je ne sais pas comment c'est traite...mais oui, c'est pratique, deja. Mais a mon avis, la methode pour travailler la-dessus doit etre plus lourde que la "clasique".
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
1 juin 2005 à 09:07
Salut a tous, le code de Jdalton42 est tres pratique ! Merci à toi !

A++
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
31 mai 2005 à 23:17
t'as des trucs pour apliquer une fonction sur un tableau, faut faire ça pour avoir ta solutio...
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2005 à 22:53
Bah c'est un tableau, t'en fais quoi de ce tableau ensuite ?

enfin ce sont plusieurs tableaux plus précisément.
kurt67 Messages postés 48 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 4 avril 2007
31 mai 2005 à 22:29
Bon ça va un peut paraitre d'être de la pub, mais moi je trouve mon systême plus pratique (celui de mon joli chat) :
$smileys = array (

"1" => array("bof.png","Bof",":\" ,":/",":-/",":-\"),

"2" => array("concombre_masque.png","Le concombre masqué","w)","w-)","W)","W-)"),

"3" => array("-D.png","Happy",":-D",":D",":d",":-d"),

"4" => array("no.png","F**k you",":7",":-7",":fuck:"),

"5" => array("angry.png","En colère",":@",":-@"),

"6" => array("lovin.png","Coup de foudre",":p",":-p",":P",":-P"),

"7" => array("trankil.png","Trankil Emile","8)","8-)"),

"8" => array("etonnant.png","Waaooow ! Incredible !",":|",":-|")
);

Qu'est-ce que vous en pensez ? Ca risque de trop faire ralentir ?
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
31 mai 2005 à 22:05
Ok la prochène fois bas une solution!!!!
Ok
@++
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2005 à 21:56
Ouais...

Une solution suffit.
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
31 mai 2005 à 21:46
C'étais pour faire toutes les solutions possibles, et éssayer d'alléger le truc.
J'ai essayé ça mais ça marche pas :
<?php
$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('smile.gif','razz.gif','wink.gif','snif.gif','evil.gif','thumleft.gif','affraid.gif','mdr.png');
$texte = str_replace($smileys,'',$texte);
echo $texte,"
\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
Je c'est pas pourquoi d'ailleur mais si non c'est claire que la promière solution qui est la meilleur. J'ai juste envoyé la seconde pour montrer ce que l'on pouvais faire avec les array.
@+
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2005 à 19:25
Bah pour nous faire toutes les solutions possibles ?
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
31 mai 2005 à 18:11
ImmortalPC => Pourquoi cette 2eme ??? Lol, elle ne sert strictement a rien...? str_replace()prenant des tableaux en parametre, ma foi...pourquoi s'en priver ?
Ce que je ne comprends pas c#est pourquoi tu presentes la 1ere solution (la bonne, donc tu sais comment faire), et puis cette 2eme vraiment etrange, lol ?
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2005 à 17:20
La deuxième solution est crade et encore plus lente que les différents str_replace tous seuls.

La première est meilleure
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
31 mai 2005 à 16:37
Si non tu as :
<?php
$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
echo $texte,"
\r\n";

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('smile.gif','razz.gif','wink.gif','snif.gif','evil.gif','thumleft.gif','affraid.gif','mdr.png');
$nb_smileys = 0;
foreach($smileys as $element){$nb_smileys++;}
for($i=0;$i<$nb_smileys;$i++){
$texte = str_replace($smileys[$i],'',$texte);
}
echo $texte,"
\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
@+
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
31 mai 2005 à 13:19
ok je vai faire les modif ;) merci...
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
31 mai 2005 à 13:16
Salut,
franchement c'est pas terrible du tout !!!
C'est lent.
1) Trop de str_replace() innultile
2) Les '' sont mieux que les "".

Donc en appliquant ce que les autres ont dit et en utilisant les '' cela donne :
<?php
$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
echo $texte,"
\r\n";

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('','','','','','','','');
$texte = str_replace($smileys,$img,$texte);
echo $texte,"
\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
@+
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
31 mai 2005 à 12:51
ok ben je verrai apres quand j'aurais un peut de temps parce que demain je commence deja mes exams donc... j'etudie a fond!!
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
31 mai 2005 à 08:42
Et c'est aussi plus rapide...

Bref ça se fait en trois ou quatre lignes un truc comme ça :-)
fg85 Messages postés 370 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 13 avril 2007
31 mai 2005 à 07:59
Lol "Anthomicro" tu à été plus rapide que moi à répondre ;-), j'allais aussi proposé 2 array :). L'avantage est que le code est plus lisible après je trouve ...

----------------
http://fg.logiciel.free.fr
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 mai 2005 à 23:01
mouais...
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
30 mai 2005 à 22:48
oui mais la c'est plus claire et plus facile a ajouter des smileys...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 mai 2005 à 22:15
justement, pour 14 lignes, autant les faire corectement...
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
30 mai 2005 à 21:11
oui... enfin je le ferais plus tard!!mais 14 lignes ce n'est pas si lourd que sa!!! enfin je vais voir pour modifier
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 mai 2005 à 21:06
Salut,

tu aurais pu passer par deux array() et un seul str_replace pour alléger et optimiser ton code.
Rejoignez-nous