Mettre des majuscules

ViPHP
ViPHP | 1380 Messages

12 août 2005, 08:27

And the winner is....

Sur 1000 boucles:

Code : Tout sélectionner

Cyrano 0.022 sec. Regex 0.012 sec. array_map 0.048 sec.
Comme quoi, les plus courtes ne sont pas forcément les meilleures!

Il me semble entendre ma douce moitié !
Modifié en dernier par Ripat le 12 août 2005, 08:30, modifié 1 fois.
ripat

Mammouth du PHP | 19672 Messages

12 août 2005, 08:30

mdrrrrrrr, note bien Ripat que je n'ai jamais mis en doute l'efficacité de ta méthode, sauf que j'arrive pas à m'y faire et à l'intégrer, j'ai loupé une marche quelque part et ça veut pas. Donc j'ai des méthodes alternative quand je veux que mon truc fonctionne :P
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1380 Messages

12 août 2005, 08:38

Tu sais, les regex c'est comme le vélo: au début, on n'arrête pas de se casser la g..... Après on trouve ça génial.

Le but du mini-bench était de tordre le cou à la réputation de lenteur, souvent non méritée, des regex. Une regex bien faite est souvent aussi rapide (et parfois même plus rapide) que les fonctions chaîne.

Il faut toujours tester au cas par cas.
ripat

ViPHP
ViPHP | 1380 Messages

12 août 2005, 08:49

Et m...., je me suis planté dans la séquence du bench:

Code : Tout sélectionner

Cyrano 0.022 sec. regex 0.047 sec. array_map 0.012 sec.
Je me fais tout petit et je sors sur la pointe des pieds :arrow:
ripat

Invité
Invité n'ayant pas de compte PHPfrance

12 août 2005, 09:51

et que pensez vous de la methode suivante

Code : Tout sélectionner

echo implode('-', array_map('ucfirst', explode('-', $s)))

Invité
Invité n'ayant pas de compte PHPfrance

12 août 2005, 09:53

par rapport a celle de ripa

Code : Tout sélectionner

echo ucfirst(preg_replace('/-([^-])/e', "' '.strtoupper('\\1')", $s));
y a t il une meilleure que l'autre ou pas

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

12 août 2005, 09:57

Code : Tout sélectionner

Cyrano 0.022 sec. array_map 0.012 sec.
Carrément 1 centième de seconde dans la vue !!!??? :shock: :afraid:

Y en a qui se sont suicidés pour moins que ça. Regarde Vatel... :langue:

NB : Ceci est juste une référence historique. Aucunement un ordre ni un conseil... :roll:

Mammouth du PHP | 19672 Messages

12 août 2005, 10:00

Code : Tout sélectionner

Cyrano 0.022 sec. array_map 0.012 sec.
Carrément 1 centième de seconde dans la vue !!!??? :shock: :afraid:

Y en a qui se sont suicidés pour moins que ça. Regarde Vatel... :langue:

NB : Ceci est juste une référence historique. Aucunement un ordre ni un conseil... :roll:
C'est pour ça que je ne me suispas lancé dans une carrière culinaire :langue:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1380 Messages

12 août 2005, 19:51

par rapport a celle de ripa

Code : Tout sélectionner

echo ucfirst(preg_replace('/-([^-])/e', "' '.strtoupper('\\1')", $s));
y a t il une meilleure que l'autre ou pas
Attention hein ce n'est pas ma regex, c'est celle proposée par le posteur initial.

J'aurais fait autrement. Comme ceci par exemple:
function majuscule($capture){
  return '-'.strtoupper($capture[1]);
}

$s = "machin-bidule-chouette";
$out = ucfirst(preg_replace_callback('#-(\w)#', "majuscule", $s));
Rajoutée à mon bench:

Code : Tout sélectionner

Vatel 0.022 sec. Regex 0.048 sec. ripat 0.018 sec. array_map 0.013 sec.
C'est mieux mais pas autant que array_map.

En passant, ça confirme que preg_replace_callback est plus efficace que preg_replace avec option e. Voir aussi ici.
ripat

Eléphant du PHP | 50 Messages

16 août 2005, 21:49

Code : Tout sélectionner

echo implode('-', array_map('ucfirst', explode('-', $s)))
ca met combien de temps lol c'est le quel le script si dessus
Vatel, Regex, ripat ou array_map ???

c'est la methode la plus rapide ?

ViPHP
ViPHP | 1380 Messages

16 août 2005, 22:05

c'est la methode la plus rapide ?
Oui.

Code : Tout sélectionner

implode('-', array_map('ucfirst', explode('-', $s)))
Est la plus rapide.
ripat

Tanguy
Invité n'ayant pas de compte PHPfrance

31 août 2005, 12:53

Code : Tout sélectionner

preg_replace("#(\w)(\w\w+)#e","strtoupper('\\1').'\\2'",$chaine)
Ex: Médecin de Famille

Eléphant du PHP | 50 Messages

04 sept. 2005, 11:14

Salut tanguy

peux tu expliquer en français ce que cela fait ?
pour ceux qui comprennent rien lol

est ce que ce code transforme medecin-de-famille en Medecin de Famille ?

qu'elle est la logique de ce code étape par étape svp

ViPHP
ViPHP | 1380 Messages

04 sept. 2005, 12:11

Non, ça met la première lettre de tout mot de plus de deux lettres en majuscule. Je ne vois pas trop où est l'intérêt mais, juste pour l'exercice:

\w un seul caractère (alphanum + accentués) suivi par...
\w\w+ un caractère directement suivit par un groupe de un ou plusieurs caractères

Equivalent au motif \w{3,} tout mot d'au moins 3 caractères.

A nouveau, il vaut mieux utiliser preg_replace_callback plutôt que preg_replace pour des raisons de rapidité.
function myUcfirst($capture){
  return ucfirst($capture[0]);
}

echo preg_replace_callback("#\w{3,}#","myUcfirst",$chaine);
ripat

Sharkz
Invité n'ayant pas de compte PHPfrance

12 juin 2013, 20:21

Merci!