FONCTION QUI PERMET DE CONVERTIR DES CODES EN SMILEYS
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 2007
-
30 mai 2005 à 21:06
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 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.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és23Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention25 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
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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és328Date d'inscriptionjeudi 26 août 2004StatutMembreDerniè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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 juin 2005 à 18:23
google : expreg
cs_bloom1
Messages postés328Date d'inscriptionjeudi 26 août 2004StatutMembreDerniè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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 8 juin 2005 à 18:14
cs_bloom1
Messages postés328Date d'inscriptionjeudi 26 août 2004StatutMembreDerniè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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 juin 2005 à 21:33
tu peux tester ce que tu veux je pense pas que t'auras plus rapide.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 juin 2005 à 18:55
ouais
fg85
Messages postés370Date d'inscriptiondimanche 28 mars 2004StatutMembreDernière intervention13 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 juin 2005 à 18:51
ouais... comme quoi 10 lignes de code peuvent déchaîner les passions.
fg85
Messages postés370Date d'inscriptiondimanche 28 mars 2004StatutMembreDernière intervention13 avril 2007 6 juin 2005 à 18:48
Lol tout sa pour un pauvre script convertisseur, les gars c'est incryable !
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és200Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention19 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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 6 juin 2005 à 17:25
lol
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és200Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention19 août 2009 6 juin 2005 à 17:15
et ho c bon areter de poster differente source...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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 ) :
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 5 juin 2005 à 08:59
Juste un dernier truc et je vous lache...
essayez le code suivant:
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és65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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 :
originalcompo
Messages postés65Date d'inscriptiondimanche 3 avril 2005StatutMembreDernière intervention 9 octobre 20071 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++)
$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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 2 juin 2005 à 10:40
ouais c'est sûr, enfin bon...
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 2 juin 2005 à 10:33
Oui mais ca va faire des redondances avec ce systeme, c'est vrai.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 1 juin 2005 à 19:47
bien sur que si, t'as juste à ajouter qqch dans le tableau...
kurt67
Messages postés48Date d'inscriptionvendredi 30 avril 2004StatutMembreDerniè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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 1 juin 2005 à 17:40
Beurk...
Une solution simple et efficace :
un ou deux arrays, et ensuite un seul str_replace.
kurt67
Messages postés48Date d'inscriptionvendredi 30 avril 2004StatutMembreDerniè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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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";
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 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és10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és392Date d'inscriptionmercredi 24 novembre 2004StatutMembreDernière intervention26 septembre 2009 1 juin 2005 à 09:07
Salut a tous, le code de Jdalton42 est tres pratique ! Merci à toi !
A++
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és48Date d'inscriptionvendredi 30 avril 2004StatutMembreDerniè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 (
Qu'est-ce que vous en pensez ? Ca risque de trop faire ralentir ?
ImmortalPC
Messages postés954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 31 mai 2005 à 22:05
Ok la prochène fois bas une solution!!!!
Ok
@++
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 31 mai 2005 à 21:56
Ouais...
Une solution suffit.
ImmortalPC
Messages postés954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 31 mai 2005 à 19:25
Bah pour nous faire toutes les solutions possibles ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 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és200Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention19 août 2009 31 mai 2005 à 13:19
ok je vai faire les modif ;) merci...
ImmortalPC
Messages postés954Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention11 novembre 20082 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és200Date d'inscriptionsamedi 25 décembre 2004StatutMembreDernière intervention19 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és9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 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és370Date d'inscriptiondimanche 28 mars 2004StatutMembreDernière intervention13 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 ...
12 janv. 2006 à 20:20
11 janv. 2006 à 18:01
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 :/
9 juin 2005 à 18:25
le i c'est pour la casse
documente toi un peu ...
9 juin 2005 à 17:59
8 juin 2005 à 19:05
ça recherche les occurences entre et et ça remplace par des ...
Bref c'est pas plus compliqué...
8 juin 2005 à 18:23
8 juin 2005 à 18:20
<?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 !
8 juin 2005 à 18:14
8 juin 2005 à 18:13
<?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 !
6 juin 2005 à 21:33
$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.
6 juin 2005 à 21:30
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 !
6 juin 2005 à 18:55
6 juin 2005 à 18:53
OUps je divague ;-)
6 juin 2005 à 18:51
6 juin 2005 à 18:48
-----------------
http://fg.logiciel.free.fr
6 juin 2005 à 18:45
et d'accord avec toi, je me suis laissé emporter. Desolé
6 juin 2005 à 18:39
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 :(
6 juin 2005 à 17:48
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...
6 juin 2005 à 17:25
6 juin 2005 à 17:23
=> 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 ;-)
6 juin 2005 à 17:15
6 juin 2005 à 17:13
=> 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.
6 juin 2005 à 16:55
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é.
6 juin 2005 à 15:18
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 ???
6 juin 2005 à 12:16
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
6 juin 2005 à 09:48
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);
?>
6 juin 2005 à 08:52
6 juin 2005 à 08:47
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...
5 juin 2005 à 11:04
5 juin 2005 à 10:41
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)
5 juin 2005 à 10:21
mouais...
Bah comme l'a dit coucou, fait un bench et reviens après :-)
5 juin 2005 à 09:26
de ce fait, le tableau est plus rapide... fais des tests...
5 juin 2005 à 08:59
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+
5 juin 2005 à 02:01
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é.
4 juin 2005 à 18:57
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)
4 juin 2005 à 18:54
$imgligne =$prefixe.implode($img, ';'.$prefixe);
$imgligne = str_replace(';', $suffixe.',', $imgligne);
$img =explode(',', $imgligne);
4 juin 2005 à 18:35
"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
?>
2 juin 2005 à 19:01
2 juin 2005 à 10:44
Et puis vraiment, la solution de Kurt67 est vraiment imbuvable! IL faudrait voir a utiliser array_search () plutot...et in_array ()
2 juin 2005 à 10:40
2 juin 2005 à 10:33
1 juin 2005 à 19:47
1 juin 2005 à 18:26
1 juin 2005 à 17:40
Une solution simple et efficace :
un ou deux arrays, et ensuite un seul str_replace.
1 juin 2005 à 17:37
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;
}
1 juin 2005 à 15:37
<?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;
?>
1 juin 2005 à 15:20
<?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
?>
1 juin 2005 à 09:09
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".
1 juin 2005 à 09:07
A++
31 mai 2005 à 23:17
31 mai 2005 à 22:53
enfin ce sont plusieurs tableaux plus précisément.
31 mai 2005 à 22:29
$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 ?
31 mai 2005 à 22:05
Ok
@++
31 mai 2005 à 21:56
Une solution suffit.
31 mai 2005 à 21:46
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.
@+
31 mai 2005 à 19:25
31 mai 2005 à 18:11
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 ?
31 mai 2005 à 17:20
La première est meilleure
31 mai 2005 à 16:37
<?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
?>
@+
31 mai 2005 à 13:19
31 mai 2005 à 13:16
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
?>
@+
31 mai 2005 à 12:51
31 mai 2005 à 08:42
Bref ça se fait en trois ou quatre lignes un truc comme ça :-)
31 mai 2005 à 07:59
----------------
http://fg.logiciel.free.fr
30 mai 2005 à 23:01
30 mai 2005 à 22:48
30 mai 2005 à 22:15
30 mai 2005 à 21:11
30 mai 2005 à 21:06
tu aurais pu passer par deux array() et un seul str_replace pour alléger et optimiser ton code.