Mettre des majuscules

Scam
Invité n'ayant pas de compte PHPfrance

10 août 2005, 20:51

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 @+

Mammouth du PHP | 19672 Messages

10 août 2005, 21:02

VOir la fonction strtoupper() et annexes
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

10 août 2005, 21:07

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

Mammouth du PHP | 19672 Messages

10 août 2005, 21:15

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 18:53

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

Mammouth du PHP | 19672 Messages

11 août 2005, 19:05

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 
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 19:10

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

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 19:17

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

Mammouth du PHP | 19672 Messages

11 août 2005, 19:29

<?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 
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 19:41

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

ViPHP
ViPHP | 1380 Messages

11 août 2005, 20:13

  • 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
ripat

Mammouth du PHP | 19672 Messages

11 août 2005, 20:36

J'aime mieux quand c'est Ripat qui explique les Expressions PCRE et même là j'en arrache un maximum pour suivre :?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 21:41

et si on veux remplacer les "-" par des " " c'est possible

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

?????

Invité
Invité n'ayant pas de compte PHPfrance

11 août 2005, 21:46

et que pensez vous de
echo implode('-', array_map('ucfirst', explode('-', $s)))

ViPHP
ViPHP | 1380 Messages

12 août 2005, 08:06

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