Fonction explode

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Dans mon script, où je saisi une identité, j'utilise la fonction "explode" pour le prénom, de façon à mettre une majuscule pour le début de chaque prénom. En supposant qu'il y ait un maximum de 4 prénoms par individus :
$prenom = strtolower($prenom);
$prenom = explode(" ", $prenom);
$prenom0 = UcFirst($prenom[0]);
$prenom1 = UcFirst($prenom[1]);
$prenom2 = UcFirst($prenom[2]);
$prenom3 = UcFirst($prenom[3]);
$prenom = ("$prenom0 $prenom1 $prenom2 $prenom3");
$prenom = trim($prenom);

Si en plus j'ai des prénoms composés, donc séparés par un trait d'union :
$prenom = explode("-", $prenom);
$prenom0 = UcFirst($prenom[0]);
$prenom1 = UcFirst($prenom[1]);
$prenom = ("$prenom0-$prenom1");

Mais cela ne fonctionne que si j'ai un seul prénom composé !
Comment faire si j'en ais 2 ou 3 ???

Merci.
A voir également:

14 réponses

gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
Bonjour, ce que tu veux c'est mettre une majuscule après chaque '-' c'est ça?
Si oui pour ma part je m'orienterais vers du traitement de la chaîne en manuel.
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Bonjour,

Essaye ça :

$prenom = strtolower($prenom);

// On met la 1ere lettre en majuscule
$prenom = UcFirst($prenom);

// Puis on recherche les autres
$prenom = preg_replace("#(\s|-)([a-z])#", strtoupper($2), $prenom);

0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Pour gardiendelanuit : oui, je veux mettre une majuscule après chaque "-".
Pour Mihawk: en testant ton code, j'ai l'erreur :
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$'
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Et ça ?

$prenom = strtolower($prenom);

// On met la 1ere lettre en majuscule
$prenom = UcFirst($prenom);

// Puis on recherche les autres
$prenom = preg_replace("#(\s|-)([a-z])#", strtoupper("$2"), $prenom);
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
J'ai testé avec 3 prénoms contenant un "-" + un prénom normal : Toutes les lettres des prénoms forment un seul mot .............
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
OUPS !
Désolé sans tester c'est pas facile :)

$prenom = strtolower($prenom);

// On met la 1ere lettre en majuscule
$prenom = UcFirst($prenom);

// Puis on recherche les autres
$prenom = preg_replace("#(\s|-)([a-z])#", "$1".strtoupper("$2"), $prenom);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Dans ton dernier exemple, si je rentre comme prénom : dd-ff yy-ff ss-ll ffffff (soit 3 prénoms composés + 1 prénom entier)
j'ai comme résultat : Dd-ff yy-ff ss-ll ffffff (soit le premier prénom du premier prénom composé qui prend la majusculmez).
Alors que j'aurais attendu : Dd-ff Yy-ff Ss-ll Ffffff
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
J'ai eu le même soucis sur un programme similaire en Javascript ce matin. Apparemment la méthode strtoupper() ne fonctionne pas dans un preg_replace(), dommage.

Bref, mais du coup dans les prénoms composés tu ne mets pas en majuscules le 2e prénom ?
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Ben non ......
En fait, je fait d'abord un explode de " " pour le cas où il y ait plusieurs prénoms (que je limite à 4)
$prenom = strtolower($prenom);
$prenom = explode(" ", $prenom);
$prenom0 = UcFirst($prenom[0]);
$prenom1 = UcFirst($prenom[1]);
$prenom2 = UcFirst($prenom[2]);
$prenom3 = UcFirst($prenom[3]);
$prenom = ("$prenom0 $prenom1 $prenom2 $prenom3");

Ensuite, il faudrait fire un explode de "-" pour les prénoms composés .......
0
Quoquo
 
$prenom = strtolower('dd-ff yy-ff ss-ll ffffff');

$a = explode(' ', $prenom);

$pre = array();

foreach($a as $b){
$c = explode('-', $b);
$f = '';
foreach($c as $e => $d){
if($e>0){
$f .= '-';
}
$f .= UcFirst($d);
}
$pre[] = $f;
}

//$pre array qui contient tout tes noms.
//De rien ;)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Balaise .............
Par contre, j'ai remplacé $prenom = strtolower('dd-ff yy-ff ss-ll ffffff'); par $prenom = strtolower('$prenom');
Et à la fin, je me retrouve à afficher comme prénom "$prenom" ????
0
Quoquo
 
Je suppose que $prenom est définis avant, alors enlève les ' ' entre tes parenthèses, sinon ça veut dire que tu lui donne la chaine "$prenom" et pas la variable $prenom.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Effectivement, j'ai enlevé les guillemets entre les paren thèses, mais aucun des prénoms n'a une majuscule.
Résultat = aaaa dddddddd bbbb-nnn gggg-eeee
0
Quoquo
 
Je pense que tu as été confusionné par les simple et les doubles quotes.

Les simples quotes sont légèrement plus rapide a mouliner, mais les doubles quotes interpètent les $variables que tu passe dedans..
Marche :
$prenom = strtolower($prenom);
$prenom = strtolower("$prenom"); (Mais inutile)

Marche pas :
$prenom = strtolower('$prenom');
0
Quoquo
 
On reprend mon code :

$prenom = 'Définir ici les prénoms, je suppose que tu les récupère depuis un formulaire ou une BDD');

//Pas touche v
$prenom = strtolower($prenom);
$a = explode(' ', $prenom);
$pre = array();
foreach($a as $b){
$c = explode('-', $b);
$f = '';
foreach($c as $e => $d){
if($e>0){
$f .= '-';
}
$f .= UcFirst($d);
}
$pre[] = $f;
}
//Pas touche ^

//Et la tu fais ce que tu veux avec $pre
0
Quoquo
 
En enlevant bien sur la parenthèse en trop qui c'est glissée dans la première ligne.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Mais alors :
$prenom = $_POST["prenom"];

$prenom = strtolower($prenom); 

$a = explode(' ', $prenom); 

$pre = array(); 

foreach($a as $b){ 
$c = explode('-', $b); 
$f = ''; 
foreach($c as $e => $d){ 
if($e>0){ 
$f .= '-'; 
} 
$f .= UcFirst($d); 
} 
$pre[] = $f; 
} 

Où est l'erreur ????
0
Quoquo
 
Ce code marche parfaitement chez moi.
Et étant donné qu'il marche aussi chez toi avec une chaine fixe, l'erreur vient de ce que tu récupère.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Ca fonctionne, mais avec un seul prénom composé.
Si tu en met plusieurs avec des prénoms non composé .............
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
OK ! En fait, c'est effectivement à l'enregistrement que j'ai un problème.
Si je fais
$sql = "INSERT INTO individus (prenom) VALUES('$prenom')";

J'ai tous mes prénoms en minuscule => normal !
Si j'écris
$sql = "INSERT INTO individus (prenom) VALUES('$f')";

je n'ai que le dernier prénom ! (avec les majuscules bien placées) .......
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
OKK Quoquo ! Ca fonctionne.
Mais si dans les prénoms, il y en a un qui n'est pas composé, il ne s'affiche pas ........ !!??
0
Quoquo
 
Les prénoms se trouvent dans $pre, pas dans $f.

$prenoms = '';

foreach($pre as $p){
$prenoms .= $p;
}

Et la ta variables $prenoms a tout dedans
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Alors là, j'comprends plus rien .................
Par rapport à
$prenom = strtolower($prenom); 
$a = explode(' ', $prenom); 
$pre = array(); 
foreach($a as $b){ 
$c = explode('-', $b); 
$f = ''; 
foreach($c as $e => $d){ 
if($e>0){ 
$f .= '-'; 
} 
$f .= UcFirst($d); 
} 
$pre[] = $f; 
} 

et
$prenoms = ''; 

foreach($pre as $p){ 
$prenoms .= $p; 
} 

que dois-je écrire ??? Faire un amalgame des deux ???
0
Quoquo
 
Je pense qu'il te manque certaines bases, je n'ai pas de tutorial a te proposer comme ça, mais mine de rien, les bases, c'est important.

Le code que je t'ai donné fabrique un array (Donc un tableau) ou sont stockés tout les prenoms

Le second code formate tout les prenoms récupéré en une seule chaine (Donc similaire a ce que tu lui injecte au tout début, j'ai donc présumé que c'était aussi ce que tu souhaitais avoir dans ta base)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
effctivement, il me manque certainement des bases ........ Mais c'est un truc que je fais uniquement pour moi, et j'aimerais bien y arriver !!!
Là, j'arrive à récupérer tous les prénoms correctement, maixs je n'ais plus d'espace entre les prénoms ......
0
Quoquo
 
Au temps pour moi.

foreach($pre as $p){
$prenoms .= ' '.$p;
}
$prenoms = substr($prenoms, 1);
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Génial .......... !!!!!
Merci beaucoup Quoquo !!!!!
Par contre, la ligne $prenoms = substr($prenoms, 1); est inutile (avec ou sans, le résultat est le même).
Je t'avouerais que je ne comprends pas tout dans ce code, mais je vais m'y pencher ;o)
A ++
0
Quoquo
 
Elle supprime l'espace au début de la chaine.
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
;o)
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Quoquo, même avec $prenoms = substr($prenoms, 1);, j'ai toujors un espace en début de chaîne .......
0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
En fait, c'est que j'avais 2 espaces .......
0