Mettre un entier < 10 sur 2 digits - PHP - Programmation
Marsh Posté le 10-07-2006 à 09:37:12
soulmanto a écrit : str_pad
|
Ce n'est pas étonnant qu'avec ça les débutants nous pondent des usines à gaz. En plus faire ca dans une boucle for. Décidement, on ne sera jamais au bout de nos peines.
Comme la très bien dit Hermes, il faut aller voir du côté de printf ou sprintf si l'on veut stocker ca dans une variable.
Exemple typique du printf :
Code :
|
Marsh Posté le 10-07-2006 à 09:42:50
non mais ton code OUI
Et pour ta gouverne, printf est à la base de la programmation en C.
Marsh Posté le 10-07-2006 à 09:46:09
Mon code est juste un exemple d'affichage. Je connais le C, mais là on est en PHP, "pour ta gouverne"...
Marsh Posté le 10-07-2006 à 09:50:28
Oui je suis d'accord on est en PHP mais ce n'est pas une raison pour pondre du code à la fois inutile et compliqué.
Marsh Posté le 10-07-2006 à 09:57:18
AlphaZone a écrit : mais ce n'est pas une raison pour pondre du code à la fois inutile et compliqué. |
Je vois pas trop en quoi son code est une uzine à gaz ....
Il fait juste une boucle for pour montrer le fonctionnement de str_pad de 0 à 10. Ce n'est ni inutile ni compliqué.
La ligne de "formatage" est aussi longue avec sprintf ou avec str_pad
Quand à l'utilisation de sprintf VS str_pad, les deux fonctionnent très bien, mais ne font pas exactement la même chose...
Je pense même que str_pad est plus rapide, mais on s'en fout un peu de gagner 3ms vu que sprintf est "conceptuellement" plus adapté.
Marsh Posté le 10-07-2006 à 09:58:24
soulmanto a écrit : Mon code est juste un exemple d'affichage. Je connais le C, mais là on est en PHP, "pour ta gouverne"... |
Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça.
Marsh Posté le 10-07-2006 à 10:00:49
AlphaZone a écrit : non mais ton code OUI |
1/ Dans la demande de zapan666, y'a une boucle, donc je ne vois pas pourquoi ce serait usine à gaz que de remettre cette même boucle. C'est toi qui répond à côté de la plaque
2.1/ La base de la programmation en C, c'est pas printf (qui demande un include) mais cout, qui est une instruction de base.
2.2/ Le PHP, c'est pas du C hein
2.3/ Et t'as l'air super malin le jour où, au lieu d'afficher le résultat, tu veux le stocker dans un fichier, bdd ou autre variable de session... Avec le str_pad, qui est (a) on ne peut plus propre, (b) rigoureusement dédié à ce que demande zapan666, (c) fortement explicite, donc lisible et maintenable
Donc bref, moi ce que j'en dis...
Marsh Posté le 10-07-2006 à 10:01:31
Hermes le Messager a écrit : Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça. |
Sprintf renvoie une chaine aussi hein
En fait dans ta phrase on peut remplacer str_pad par sprintf partout
Marsh Posté le 10-07-2006 à 10:04:15
anapajari a écrit : Sprintf renvoie une chaine aussi hein |
mwoué peut-être finalement... Faut dire que j'ai fait aussi du C étant bcp plus jeune, c'est pour ça... Je sais pas moi, ça me choque de rajouter des 0 comme ça... ça doit être psychologique...
Marsh Posté le 10-07-2006 à 10:07:11
Hermes le Messager a écrit : Le problème avec ton code, c'est que c'est surtout le mauvais type qui est renvoyé : une chaine alors que lui veut un nombre. Même si en PHP ça ne change effectivement rien (et on peut le regretter), ma solution est quand même bcp plus propre (et églement sans doute plus optimisée --> pas testé). str_pad ne sert pas à ça à la base même s'il peut être utilisé comme ça. |
Chuis pas d'accord : en comptant que les librairies du PHP sont bien écrites (rien n'est moins sûr) le printf est censé utiliser en interne le str_pad, de toute façon. Ensuite, représenter "un nombre" avec le 0 facultatif, y'a un souci quelque part. Une représentation de n'importe quelle variable, c'est forcément sous forme de chaîne (ou à la limite, array de bytes, si on fait une image). Un integer, ça n'a pas de représentation "visuelle". Déjà, rien que la base peut varier... Alors la représentation.
Deplus, le printf(), "retourne" dans tous les cas un str, je ne vois pas ce qu'il pourrait retourner d'autre... Il sert justement à rediriger vers la sortie standard des variables, selon un formattage précisé dans un pattern. Rien que la notion de formattage selon un pattern, ça induit une string.
Pour en revenir au problème de départ, en plus je ne suis pas vraiment sur que le printf retourne quoi que ce soit... A moins de rediriger la sortie standard vers un stream en mémoire, et aller le relire, je ne vois pas comment tu veux récupérer une valeur de retour...
Marsh Posté le 10-07-2006 à 10:08:32
Arjuna a écrit : |
Oué, t'as raison pour ça, aucun doute, j'ai oublié de réfléchir sur ce coup.
Marsh Posté le 10-07-2006 à 10:11:51
C'est pas grave
Dans tous les cas, le coup du printf() est de toute façon une bonne solution aussi.
Genre si demain il veut une représentation de la sorte :
a,aaa,aaa.aa
Ben avec des str_pad, il est pas sorti, alors qu'avec un printf ça marche tout seul
moi j'intervenais juste pour dire que dans ce cas précis, str_pad était tout aussi intelligent, puisqu'il ne formatte pas réellement le nombre, il veut juste forcer le nombre de caractères sur lequelle il est représenté. Dans ce cas, str_pad est mieu adapté, car je suis convaincu que c'est plus rapide, et surtout, c'est dédié, donc aucune confusion possible (parceque si on se sert d'un printf() pour récupérer une variable, moi je vais direct chercher du bois et je prépare un bûcher )
Marsh Posté le 10-07-2006 à 10:25:47
Arjuna a écrit : 1/ Dans la demande de zapan666, y'a une boucle, donc je ne vois pas pourquoi ce serait usine à gaz que de remettre cette même boucle. C'est toi qui répond à côté de la plaque |
Mouai, si tu veux...
Arjuna a écrit : |
Ah bon et depuis quand ?
Etant bête et discipliné, on m'a toujours appris "cout" pour le C++
Arjuna a écrit : 2.2/ Le PHP, c'est pas du C hein |
Je viens d'apprendre quelque chose. Heureusement que tu étais là !
Arjuna a écrit : 2.3/ Et t'as l'air super malin le jour où, au lieu d'afficher le résultat, tu veux le stocker dans un fichier, bdd ou autre variable de session... |
Bah toi aussi, parce que c'est pas avec str_pad que tu en feras autant ^^
Et puis il y a sprintf pour renvoyer dans une varaible. Et fprintf pour renvoyer dans un fichier.
Arjuna a écrit : Avec le str_pad, qui est (a) on ne peut plus propre, (b) rigoureusement dédié à ce que demande zapan666, (c) fortement explicite, donc lisible et maintenable |
Je ne te souhaite pas de devenir programmeur.
Arjuna a écrit : Donc bref, moi ce que j'en dis... |
Enfin pour ce que j'en dis
Marsh Posté le 10-07-2006 à 10:37:15
Arjuna a écrit : Genre si demain il veut une représentation de la sorte : |
Oui mais la tu as quand même number_format qu'est plus fait pour ça
Marsh Posté le 10-07-2006 à 10:40:40
ça c'est que s'il veut un formatage complèxe
non, je suis 100% d'accord avec toi pour le number_format, qui est infiniement mieux que le printf() et est encore plus dédié que le str_pad(), donc la solution utime au problème
mais moi je la connais pas cette fonction, je fais pas de php
en C# c'est plus simple : tu dérives le type "byte" en "TowDigitsNumber", et tu surcharges le "ToString()" et zou Comme ça dedans tu fais la tambouille que tu veux, personne ne sait ce que tu y fais de toute façon
Marsh Posté le 10-07-2006 à 10:42:39
euh, c'est moi ou vous etes parti completement en live ?
str_pad, printf et sprintf c'est pile poil ce que je voulais, merci
Pour votre boucle : je vois pas ou j'ai demande une boucle.
str_pad n'est pas une usine a gas, c'est pareil pour moi que sprintf et co.
et non, je ne voulais pas un nombre mais une chaine de caractere.
Mais....de par ce fait, la question se pose :
Donc apparament, printf et co renvoit une chaine de caractere.
Mais si je veux passer de 2 en base 10, a 2 en base 8 (donc 02) ?
...je repond moi meme :
Code :
|
Merci
Marsh Posté le 10-07-2006 à 10:55:28
AlphaZone a écrit : Bah toi aussi, parce que c'est pas avec str_pad que tu en feras autant ^^ |
Super la généricité du code quoi...
Moi je bosse dans des variables jusqu'au moment ultime ou je dois faire quelquechose de ma variable.
Toi, tu préfères décider ce que tu vas faire de ta variable avant de la traîter...
Super l'optimisation et la lisibilité.
Donc :
tu décide de transformer "1" en "01". tu veux l'afficher à l'écran pour montrer que tu l'as bien fait.
tu veux le stocker en base de données, puisque c'est pour ça que tu fais le traîtement.
et enfin, pour garder une trace, tu mets aussi en log...
moi je fais un str_pad (ou format number) sur ma variable, puis je lance un appel pour chaque sortie (écran, fichier, bdd).
Toi, tu préfères faire un appel par sortie, sâchant que c'est cet appel qui va faire le traîtement.. Donc tu fais 3 fois la même chose. Bravo.
Et je ne parle pas de ce que ça donne le jour où tu veux passer de 2 chars à 10 chars... Moi j'ai un appel à une fonction à modifier. Toi, t'as 3 patterns à retrouver (pas forcément groupés en plus) et à modifier.
Et tu oses me dire ça ?
AlphaZone a écrit : Je ne te souhaite pas de devenir programmeur. |
Marsh Posté le 10-07-2006 à 11:24:02
Ecoute je ne suis pas la pour critiquer ta façon de travailler encore moin de la connaitre. Tu code comme tu veux, et moi pareil.
Sur ce, bonne journée.
A bon entendeur
Marsh Posté le 10-07-2006 à 12:02:57
jamais dis le contraire, ça y est, il est énervé
c'est toi qui veut pas que le fasse programmeur (pis d'abors, je suis pas programmeur, je suis cp/expert erp/developpeur/architect d'app, mais pas programmeur
Marsh Posté le 09-07-2006 à 04:11:54
Salut,
je me demande quel est le moyen le plus simple, le mieux, le plus rapide, bref, comment faire au mieux pour mettre un nombre sur deux digits (par exemple)
genre
je veux que ça devienne
Le seul truc dont je suis sûr que ça marche :
(et je trouve que ça craint, surtout si on veux passer à plusieurs digits...
Thx
---------------
my flick r - Just Tab it !