begin process at 2012 05 27 20:20:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > FONCTION QUI PERMET DE CONVERTIR DES CODES EN SMILEYS

FONCTION QUI PERMET DE CONVERTIR DES CODES EN SMILEYS


 Information sur la source

Note :
6,36 / 10 - par 11 personnes
6,36 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :convertir, texte, smileys, conversion Niveau :Débutant Date de création :30/05/2005 Date de mise à jour :16/05/2012 09:55:51 Vu / téléchargé :6 959 / 330

Auteur : jdalton42

Ecrire un message privé
Commentaire sur cette source (69)
Ajouter un commentaire et/ou une note

 Description

Cette fonction permet l'insertion de smileys dans un texte.
Il remplace un code du style :D ou :@ ou encore :) par l'image lui correspondant.
La mise à jour du code permet l'utilisation d'une base de données pour stocker les codes des smileys et ainsi pouvoir, par exemple, en ajouter depuis un espace d'administration

Source

  • <?php
  • function smileys($texte)
  • {
  • $smile_dbhost = 'localhost'; //adresse de la base de donnees (en general toujours localhost)
  • $smile_dbname = 'DB_NAME'; //ATTENTION: remplacer DB_NAME par le nom de la base de donnees
  • $smile_dblogin = 'DB_LOGIN'; //ATTENTION: remplacer DB_LOGIN par le login de connexion a la base de donnees
  • $smile_dbpassword = 'DB_PASSWORD'; //ATTENTION: remplacer DB_PASSWORD par le password associé au login de la base de donnees
  • $bdd = new PDO('mysql:host='.$smile_dbhost.';dbname='.$smile_dbname, $smile_dblogin, $smile_dbpassword);
  • $requete = $bdd->query('SELECT `code`, `url` FROM `'.$smile_dbname.'`.`smileys`');
  • while($resultat = $requete->fetch())
  • {
  • $code = $resultat['code'];
  • $url = $resultat['url'];
  • $texte = str_replace($code, '<img src="'.$url.'" alt="'.$code.'" />', $texte);
  • }
  • $requete->closeCursor();
  • return $texte;
  • }
  • ?>
<?php
	function smileys($texte)
	{
		$smile_dbhost = 'localhost'; //adresse de la base de donnees (en general toujours localhost)
		$smile_dbname = 'DB_NAME'; //ATTENTION: remplacer DB_NAME par le nom de la base de donnees
		$smile_dblogin = 'DB_LOGIN'; //ATTENTION: remplacer DB_LOGIN par le login de connexion a la base de donnees
		$smile_dbpassword = 'DB_PASSWORD'; //ATTENTION: remplacer DB_PASSWORD par le password associé au login de la base de donnees
		$bdd = new PDO('mysql:host='.$smile_dbhost.';dbname='.$smile_dbname, $smile_dblogin, $smile_dbpassword);
		$requete = $bdd->query('SELECT `code`, `url` FROM `'.$smile_dbname.'`.`smileys`');
		while($resultat = $requete->fetch())
		{
			$code = $resultat['code'];
			$url = $resultat['url'];
			$texte = str_replace($code, '<img src="'.$url.'" alt="'.$code.'" />', $texte);
		}
		$requete->closeCursor();
		return $texte;
	}
?>

 Conclusion

Un dossier contenant plusieurs smileys est disponible dans le zip ainsi que le fichier sql permettant la création de la table de données associées aux images.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

31 mai 2005 13:25:07 :
optimisation du code, petite correction de l'orthographe et cangement de l'explication finale!
31 mai 2005 13:26:50 :
reglage d'un bug avec le zip apres derniere mise a jour
01 juin 2005 12:17:50 :
ajout des balises alt
18 février 2011 19:14:32 :
ajout et modification des commentaires dans le code
18 février 2011 19:15:34 :
-
05 mars 2011 16:56:52 :
Code totalement retravaillé permettant de pouvoir gérer les smileys depuis une base de données
05 mars 2011 16:58:43 :
petite erreur corrigée dans le code
16 mai 2012 09:48:24 :
Optimisations diverses
16 mai 2012 09:55:51 :
Optimisations

 Sources de la même categorie

Source avec une capture MODULE JOOMLA 1.5 NOW LISTENING par Alcantornet
Source avec Zip Source avec une capture UPLOAD CENTER par basssem81
Source avec Zip COMPTEUR DE CLIQUE PHP AVEC JQUERY par devgoneti
Source avec Zip LIVRE D'OR SIMPLE (POUR DÉBUTANT) par devgoneti
Source avec Zip SCRIPT TRAVAUX POUR VOTRE SITE par FleuryK

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CONVERTIR BASE FIREBIRD EN MYSQL par castelfrederic29
Source avec Zip Source avec une capture CONVERTISSEUR DE NOMBRES EN TEXTE par macruz
Source avec Zip CONVERTIR UN CHIFFRE EN LETTRE (PHP) par tahe
CONVERSION DATE FORMAT ANGLAIS-FRANÇAIS + HEURE par shortz
CONVERSION DATE par hooss

Commentaires et avis

Commentaire de Anthomicro le 30/05/2005 21:06:32

Salut,

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

Commentaire de jdalton42 le 30/05/2005 21:11:46

oui... enfin je le ferais plus tard!!mais 14 lignes ce n'est pas si lourd que sa!!! enfin je vais voir pour modifier

Commentaire de coucou747 le 30/05/2005 22:15:59 administrateur CS

justement, pour 14 lignes, autant les faire corectement...

Commentaire de jdalton42 le 30/05/2005 22:48:28

oui mais la c'est plus claire et plus facile a ajouter des smileys...

Commentaire de Anthomicro le 30/05/2005 23:01:24

mouais...

Commentaire de fg85 le 31/05/2005 07:59:13

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

Commentaire de Anthomicro le 31/05/2005 08:42:40

Et c'est aussi plus rapide...

Bref ça se fait en trois ou quatre lignes un truc comme ça :-)

Commentaire de jdalton42 le 31/05/2005 12:51:28

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!!

Commentaire de ImmortalPC le 31/05/2005 13:16:31

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,"<br />\r\n";

$smileys = array(':)',':P',';)',':(',':@',':D',':peur:','mdr');
$img = array('<img src="/images/smileys/smile.gif">','<img src="/images/smileys/razz.gif">','<img src="/images/smileys/wink.gif">','<img src="/images/smileys/snif.gif">','<img src="/images/smileys/evil.gif">','<img src="/images/smileys/thumleft.gif">','<img src="/images/smileys/affraid.gif">','<img src="/images/smileys/mdr.png">');
$texte = str_replace($smileys,$img,$texte);
echo $texte,"<br />\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
@+

Commentaire de jdalton42 le 31/05/2005 13:19:24

ok je vai faire les modif ;) merci...

Commentaire de ImmortalPC le 31/05/2005 16:37:39

Si non tu as :
<?php
$texte = 'le texte de votre page :) :P ;)';//ici, mettez le texte de votre page entre les ''
echo $texte,"<br />\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],'<img src="/images/smileys/'.$img[$i].'" alt="'.$smileys[$i].'" />',$texte);
}
echo $texte,"<br />\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>
@+

Commentaire de Anthomicro le 31/05/2005 17:20:30

La deuxième solution est crade et encore plus lente que les différents str_replace tous seuls.

La première est meilleure

Commentaire de malalam le 31/05/2005 18:11:41 administrateur CS

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 ?

Commentaire de Anthomicro le 31/05/2005 19:25:17

Bah pour nous faire toutes les solutions possibles ?

Commentaire de ImmortalPC le 31/05/2005 21:46:12

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,'<img src="/images/smileys/'.$img.'" alt="'.$smileys.'" />',$texte);
echo $texte,"<br />\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.
@+

Commentaire de Anthomicro le 31/05/2005 21:56:06

Ouais...

Une solution suffit.

Commentaire de ImmortalPC le 31/05/2005 22:05:06

Ok la prochène fois bas une solution!!!!
Ok
@++

Commentaire de kurt67 le 31/05/2005 22:29:59

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 ?

Commentaire de Anthomicro le 31/05/2005 22:53:22

Bah c'est un tableau, t'en fais quoi de ce tableau ensuite ?

enfin ce sont plusieurs tableaux plus précisément.

Commentaire de coucou747 le 31/05/2005 23:17:24 administrateur CS

t'as des trucs pour apliquer une fonction sur un tableau, faut faire ça pour avoir ta solutio...

Commentaire de Arnauti le 01/06/2005 09:07:47

Salut a tous, le code de Jdalton42 est tres pratique ! Merci à toi !

A++

Commentaire de malalam le 01/06/2005 09:09:12 administrateur CS

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".

Commentaire de FhX le 01/06/2005 15:20:42

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,"<br />\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,"<br />\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>

Commentaire de malalam le 01/06/2005 15:37:36 administrateur CS

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,"<br />\r\n";

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

?>

Commentaire de kurt67 le 01/06/2005 17:37:51

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, "<img src=\"smileys/".$array[$key][0]."\" alt=\"".$val2."\" />", $texte);
return $texte;

}

Commentaire de Anthomicro le 01/06/2005 17:40:17

Beurk...

Une solution simple et efficace :

un ou deux arrays, et ensuite un seul str_replace.

Commentaire de kurt67 le 01/06/2005 18:26:29

oui mais le problême c'est qu'on ne peut pas définir plusieurs chaines différentes à reconnaitre pour un même smiley ?

Commentaire de coucou747 le 01/06/2005 19:47:15 administrateur CS

bien sur que si, t'as juste à ajouter qqch dans le tableau...

Commentaire de malalam le 02/06/2005 10:33:26 administrateur CS

Oui mais ca va faire des redondances avec ce systeme, c'est vrai.

Commentaire de Anthomicro le 02/06/2005 10:40:40

ouais c'est sûr, enfin bon...

Commentaire de malalam le 02/06/2005 10:44:55 administrateur CS

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 ()

Commentaire de Anthomicro le 02/06/2005 19:01:52

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

Commentaire de originalcompo le 04/06/2005 18:35:19

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,"<br />\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 ='<img src="./images/smileys/';
$suffixe ='">';

$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,"<br />\r\n";//ici,on fait l'affichage du texte apres avoir changé les codes en smileys
?>

Commentaire de originalcompo le 04/06/2005 18:54:19

variante: les 4 lignes du milieu peuvent être remplacées par

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

Commentaire de Anthomicro le 04/06/2005 18:57:23

"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)

Commentaire de originalcompo le 05/06/2005 02:01:00

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é.

Commentaire de originalcompo le 05/06/2005 08:59:09

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."<br />\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+

Commentaire de coucou747 le 05/06/2005 09:26:56 administrateur CS

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...

Commentaire de Anthomicro le 05/06/2005 10:21:37

"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 :-)

Commentaire de originalcompo le 05/06/2005 10:41:56

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)

Commentaire de Anthomicro le 05/06/2005 11:04:57

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.

Commentaire de originalcompo le 06/06/2005 08:47:45

"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...

Commentaire de Anthomicro le 06/06/2005 08:52:29

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.

Commentaire de malalam le 06/06/2005 09:48:05 administrateur CS

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,"<br />\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);

?>

Commentaire de originalcompo le 06/06/2005 12:16:53

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

Commentaire de coucou747 le 06/06/2005 15:18:31 administrateur CS

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 ???

Commentaire de Anthomicro le 06/06/2005 16:55:42

"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é.

Commentaire de malalam le 06/06/2005 17:13:58 administrateur CS

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.

Commentaire de jdalton42 le 06/06/2005 17:15:14

et ho c bon areter de poster differente source...

Commentaire de malalam le 06/06/2005 17:23:25 administrateur CS

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 ;-)

Commentaire de Anthomicro le 06/06/2005 17:25:27

lol

Commentaire de originalcompo le 06/06/2005 17:48:17

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...

Commentaire de jdalton42 le 06/06/2005 18:39:59

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 :(

Commentaire de originalcompo le 06/06/2005 18:45:58

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é

Commentaire de fg85 le 06/06/2005 18:48:52

Lol tout sa pour un pauvre script convertisseur, les gars c'est incryable !

-----------------
http://fg.logiciel.free.fr

Commentaire de Anthomicro le 06/06/2005 18:51:32

ouais... comme quoi 10 lignes de code peuvent déchaîner les passions.

Commentaire de fg85 le 06/06/2005 18:53:49

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 ;-)

Commentaire de Anthomicro le 06/06/2005 18:55:53

ouais

Commentaire de coucou747 le 06/06/2005 21:30:48 administrateur CS

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 !

Commentaire de Anthomicro le 06/06/2005 21:33:22

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.

Commentaire de bloom1 le 08/06/2005 18:13:38

Vous pouvez me dire qu'est-ce que cette fonction fait et expliquez-moi comment l'utiliser :
<?php
// Bloc des balises [b]-[/b]
$chaine = preg_replace('#\[b](.+?)\[/b]#si','<strong>$1</strong>',$chaine);
?>
Merci de me dire c'est quoi qu'elle fait et comment l'utiliser.
Merci d'avance !

Commentaire de malalam le 08/06/2005 18:14:47 administrateur CS

Bloom1 => http://www.expreg.com/

Commentaire de bloom1 le 08/06/2005 18:20:38

Vous pouvez me dire qu'est-ce que cette fonction fait et expliquez-moi comment l'utiliser :
<?php
// Bloc des balises [b]-[/b]
$chaine = preg_replace('#\[b](.+?)\[/b]#si','<strong>$1</strong>',$chaine);
?>
Merci de me dire c'est quoi qu'elle fait et comment l'utiliser.
Merci d'avance !

Commentaire de coucou747 le 08/06/2005 18:23:34 administrateur CS

google : expreg

Commentaire de Anthomicro le 08/06/2005 19:05:34

bon on va lui dire parce que sinon il va continuer à flooder :

ça recherche les occurences entre [b] et [/b] et ça remplace par des <strong></strong>...

Bref c'est pas plus compliqué...

Commentaire de bloom1 le 09/06/2005 17:59:08

Ok merci, est-ce que ca fonctionne si on les met en majuscules ? genre [B][/B] ???

Commentaire de Anthomicro le 09/06/2005 18:25:58

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 ...

Commentaire de lOeil le 11/01/2006 18:01:50

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,"<br />\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("<img src=\"".$repertoire."smile.gif\">","<img src=\"".$repertoire."smile.gif\">","<img src=\"".$repertoire."smile.gif\">","<img src=\"".$repertoire."smile.gif\" >","<img src=\"".$repertoire."smile.gif\" >","<img src=\"".$repertoire."smile.gif\" >","<img src=\"".$repertoire."smile.gif\" >","<img src=\"".$repertoire."smile.gif\" >");


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

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

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


Quand je fais: echo $texte,"<br />\r\n";   dans la fonction je voi bien les smiley mais pas en dehors de la fonction :/

Commentaire de coucou747 le 12/01/2006 20:20:11 administrateur CS

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...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

probleme conversion HTML -> Texte -> HTML [ par Cho7Kipu ] Coucou tt le monde !Bon alors j'explik mon probleme :J'ai fait un site de partition. Pour que mon moteur puisse rechercher des mots contenu dans une d Tags Word - Conversion [ par jdaviaud ] Bonjour a tous,J'essaye desespérément de faire une interface d'import de fichiers texte pour les convertir ensuite en fichier HTML, tout fonctionne im Conversion Texte vers BMP C++ [ par houlalalala ] Bonjour &#224; tous,Je cherche un tuyau (librairie,&nbsp;code existant...)&nbsp;pour d&#233;velopper un outil C++ me permettant de convertir un fichie ajout smileys dans chat [ par joebuz ] Salut, voila j'ai un mini-tchat, avec champ texte et un bouton "ok" pour ajouter un message.Je souhaite proposer l'ajout de smileys dans le champ text problème d'écriture dans un fichier texte ! [ par nicomilville ] Salut,J'essai d'écrire dans un fichier texte qui est vide sauf que ça ne marche pas...Je n'ai aucune erreur...mon code :                Divers :&lt;br conversion image-texte et inversement !!! [ par emiilie ] Bonjour a tous !voila, je cherche a convertir une image en un format texte pour le copier dans une variable qui va ensuite etre transfer&#233; par pos convertir du texte en code ASCII ????? [ par zut69 ] Bonsoir,Je chercherais une méthode pour convertir du texte en code ASCII, c est a dire une fonction qui me convertirait:$variable = "ab cd";en:$variab Convertir le texte en Image pour la validation du formulaire [ par alvinemambele ] Salut!je cherche de l'aide!j'ai fais un formulaire dans mon web site et je veux qu'avant de l'envoyer que l'utilisateur introduise le code de validati aider moi svp [ par ahlemlo ] bonjourj'ai pas encore trouver la réponseaider moi je suis bloquévoici j'ai mis ce code pour envoi mail avec piéce jointe j'ai réçu le mail mais la pi Convertir une donnée numerique d'un formulaire en pourcentage [ par kevin54000 ] Bonjour a tous ! Je voudrais convertir une donnée numerique d'un formulaire ( une remise ) qui modifie mon prix HT. Pour l'instant cela soustrait just


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales