Page 1 sur 2

Mettre des majuscules

Posté : 10 août 2005, 20:51
par Scam
Salut je reformule proprement ma question lol

j'ai dans mes pages php j'affiche le nom de mon fichier
exemple le fichier
machin.php affiche machin
machin-bidule.php affiche machin-bidule

avec la fonction suivante

Code : Tout sélectionner

<?php echo basename($_SERVER["PHP_SELF"],".php"); ?>

Question 1
Est ce quelqu'un sait comment faire pour afficher le nom avec une majuscule au début et après chaque "-"

machin.php affiche Machin
machin-bidule.php affiche Machin-bidule
machin-bidule-blabla.php affiche Machin-bidule-Blabla


Question 2
Est ce quelqu'un sait comment faire pour afficher le nom qu'avec des majuscules

machin.php affiche MACHIN
machin-bidule.php affiche MACHIN-BIDULE
machin-bidule-blabla.php affiche MACHIN-BIDULE-BLABLA

que dois je apporte comme modif a mon script

Code : Tout sélectionner

<?php echo basename($_SERVER["PHP_SELF"],".php"); ?>
merci @+

Posté : 10 août 2005, 21:02
par Cyrano
VOir la fonction strtoupper() et annexes

Posté : 10 août 2005, 21:07
par Invité
oué mais bon la faut eter balaise lol
pour tout ecrire enmajuscule ok

mais pour mettre que la premiere lettre de chaque mot ???

style : machin-bidulle donne Machin-Bidule

Posté : 10 août 2005, 21:15
par Cyrano
C'est pour ça que j'ai précisé "et annexes" : regarde ucfirst()
Attention toutefois, : tu devras faire un explode() sur la chaine pour séparer les mots composés.

Posté : 11 août 2005, 18:53
par Invité
Apres pleins de recherche

j'ai reussit a faire le script suivant

Code : Tout sélectionner

<?php $s = basename(dirname($_SERVER["PHP_SELF"])); echo preg_replace('/-([^-])/e', "strtoupper('\\1')", $s); ?>
parcontre ca ne donne pas exactement ce que je veux

pour le dossier machin-bidule-chouet

ca m'affiche machinBiduleChouet

Alors que je souhaite afficher Machin-Bidule-Chouet

il manque la majuscule au premier mot et je souhaite pas faire disparaitre les "-"


la je bloque je sais plus faire j'ai besoin d'aide

Posté : 11 août 2005, 19:05
par Cyrano
Mouais, vu mon niveau avec les regex, je m'aventurerai pas, par contre j'ai un truc certainement un poil plus lourd mais qui fonctionne:
<?php
$s = "maChIn-biDulE-chOuEtte";
$s = strtolower($s);
$sMaj = explode("-", $s);
$sTab = array();
foreach($sMaj as $mot)
{
    $mot = ucfirst($mot);
    array_push($sTab, $mot);
}
$s_nouveau = implode("-", $sTab);
echo($s_nouveau);
// Affiche : Machin-Bidule-Chouette 
?>

Posté : 11 août 2005, 19:10
par Invité
Salut je vient de trouver ca
je maitrise pas tout c'est peu etre un peu folclorique j'aimerais avoir votre avis, vos commentaires et explication car j'ai fais cela par conparaison par test mais sans rien y connaitre

Code : Tout sélectionner

<?php $s = basename(dirname($_SERVER["PHP_SELF"])); echo ucfirst(preg_replace('/-([^-])/e', "strtoupper('\\0')", $s)); ?>

Posté : 11 août 2005, 19:17
par Invité
est il possible d'expliquer ligne par ligne les 2 scripts

Code : Tout sélectionner

<?php $s = "maChIn-biDulE-chOuEtte"; $s = strtolower($s); $sMaj = explode("-", $s); $sTab = array(); foreach($sMaj as $mot) { $mot = ucfirst($mot); array_push($sTab, $mot); } $s_nouveau = implode("-", $sTab); echo($s_nouveau); // Affiche : Machin-Bidule-Chouette ?>
et

Code : Tout sélectionner

<?php $s = basename(dirname($_SERVER["PHP_SELF"])); echo ucfirst(preg_replace('/-([^-])/e', "strtoupper('\\0')", $s)); ?>

Posté : 11 août 2005, 19:29
par Cyrano
<?php
/* DÉfinition de la chaîne à traiter */
$s = "maChIn-biDulE-chOuEtte";
/* On met toute la chaine en minuscule */
$s = strtolower($s);
/* On isole chaque élément du mot composé en se basant sur le séparateur "-" */
$sMaj = explode("-", $s);
/* On crée un tableau pour contenir les nouvelles valeurs */
$sTab = array();
/* Boucle de traitement de chaque élément contenu dans le tableau $sMaj */
foreach($sMaj as $mot)
{
    /* Mise en majuscule de la première lettre de l'élément */
    $mot = ucfirst($mot);
    /* Enregistrement de l'élément dans le tableau de sortie */
    array_push($sTab, $mot);
}
/* Reconstruction du mot composé avec les valeurs traitées */
$s_nouveau = implode("-", $sTab);
/* Affichage du résultat */
echo($s_nouveau);
// Affiche : Machin-Bidule-Chouette 
?>

Posté : 11 août 2005, 19:41
par Invité
UN GRAND MERCI



est il possible egalement de commenter le script suivant

<?php
$s = "maChIn-biDulE-chOuEtte";
echo ucfirst(preg_replace('/-([^-])/e', "strtoupper('\\0')", $s)); ?>

Posté : 11 août 2005, 20:13
par Ripat
  • groupe du motif de concordance (match): /-([^-])/e
    • / délimiteur
    • -([^-]) tout tiret suivit par un caractère autre qu'un tiret ( sera stocké dans référence arrière 0 si trouvé)
    • /e délimiteur suivi par l'option e (evaluer du php)
  • groupe de remplacement: strtoupper('\\0') : remplacé par la mise en majuscule de la concordance (référence arrière 0) au motif (c-àd un tiret suivit d'un caractère)
Voir aussi ce fil http://www.phpfrance.com/forums/voir_su ... texte-.php

Posté : 11 août 2005, 20:36
par Cyrano
J'aime mieux quand c'est Ripat qui explique les Expressions PCRE et même là j'en arrache un maximum pour suivre :?

Posté : 11 août 2005, 21:41
par Invité
et si on veux remplacer les "-" par des " " c'est possible

Ainsi d'afficher Machin Budule Truc a partir de machin-bidule-truc

?????

Posté : 11 août 2005, 21:46
par Invité
et que pensez vous de
echo implode('-', array_map('ucfirst', explode('-', $s)))

Posté : 12 août 2005, 08:06
par Ripat
et si on veux remplacer les "-" par des " " c'est possible
Ainsi d'afficher Machin Budule Truc a partir de machin-bidule-truc
echo ucfirst(preg_replace('/-([^-])/e', "' '.strtoupper('\\1')", $s));
Ici on récupère la référence arrière 1 c-à-d ce qui est capturé dans la première (et unique) parenthèse. Dans le groupe de remplacement on ajoute un blanc "' '.strtoupper('\\1')

et que pensez vous de
echo implode('-', array_map('ucfirst', explode('-', $s)))
C'est, en une seule ligne, la solution qui est postée plus haut par Cyrano:
  1. explode sur le tiret (stocké dans un tableau)
  2. ucfirst() sur chaque élément du tableau (ici avec la fonction callback array_map, plus haut avec un foreach)
  3. implode avec un tiret
Faudrait tester ce qui est le plus rapide.