Page 1 sur 1
Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 15:12
par Arrow9
Bonjour j'aurais besoin d'aide pour un exercice de php.
Voici l'énoncé
"Écrivez une fonction dont le paramètre (passé par référence) est un tableau de chaînes de
caractères et qui transforme chacun des éléments du tableau de manière que le premier
caractère soit en majuscule et les autres en minuscules, quelle que soit la casse initiale des
éléments. Utilisez les fonctions strtoupper et strtolower."
Mon code est
<?php
function MajMin($tab){
foreach($tab as $key=>$val){
$maj=substr($val,0,1);
$tab[$key]=(strtoupper($maj));
$tab[$key]=(strtolower($val));
}
return $tab;
}
$tableau=array("fRaNcE","aLlEmAgNe","eSpAgNe");
print_r(MajMin($tableau));
?>
Le problème c'est que quand je le visualise, le strtoupper ne marche pas...
Merci

Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 16:21
par KriSpiX
Salut,
C'est normal, la valeur de tes éléments de ton tableau est écrasée et correspond donc au strtolower. C'est comme si tu avais fait a = 1 puis a = 2.
Néanmoins, une simple concaténation n'irait pas non plus ici puisque tu te retrouveras avec Ffrance à la fin par exemple. Tu dois exclure le premier caractère de ton lower avant de le concaténer par exemple.
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 16:24
par Spols
$tab[$key]=(strtoupper($maj));
$tab[$key]=(strtolower($val));
Avec ceci, ta deuxième instruction remplace ta première. C'est comme si tu réécrivais sur la même feuille de papier plutot que de la retourner.
tu peux utiliser .= pour concatèner tes chaines de caractère les unes après les autres. Mais tu aura malgré tout une surprise et pas encore le résultat escompté. car la première lettre de chaque chaine sera répété en Majuscule et en minuscule. Je te laisse le soin de chercher le pourquoi ou de revenir avec cette question si tu ne trouve pas.
PS si l'énoncé de l'exercice précise de faire une fonction par référence, il faudrait que tu te renseigne sur la signification de cette instruction car pour l'instant cette fonction n'utilise pas d'argument passé par référence.
Je vois que mon voisin du dessus est d'accords avec moi

Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 16:43
par Arrow9
J'ai modifié pour obtenir :
<?php
function MajMin(&$tab){
foreach($tab as $key=>$val){
$maj=substr($val,0,1);
$min=substr($val,1,1000);
$tab[$key]=(strtoupper($maj));
$tab[$key].=(strtolower($min));
}
return $tab;
}
$tab=array("fRaNcE","aLlEmAgNe","eSpAgNe");
print_r(MajMin($tab));
?>
Ça marche, par contre je vois pas ce qui va pas avec la référence...
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 16:54
par KriSpiX
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:03
par Spols
petit plus,
pour cette ligne :
$min=substr($val,1,1000);
le 3ème paramètre est facultatif, et si il est omit, la coupure ira jusqu'à la fin de la chaine.
Des fois que la fonction serait utilisé pour des chaines de plus de 1001 caractères
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:11
par Arrow9
Ok merci !
Et KriSpiX j'ai était voir ce site mais je vois pas ce qu'il y a de différent dans mon code
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:29
par Spols
Le passage par référence va travailler sur la variable directement plutot que d'en prendre une copie.
Cela a comme incidence direct, qu'il est inutile de faire un return à la fin de la fonction.
L'autre conséquence (en cascade) c'est comme il n'y a pas de retour, il ne sert à rien de l'enregistrer dans une variable ou de l'imprimer (avec print, echo et consort)
on transforme donc notre tableau comme ceci
MajMin($tab);
et ensuite un print_r $tab;
affichera le tableau modifié.
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:31
par KriSpiX
J'avais pas vu que tu avais rajouté le "&" dans les paramètres. En fait comme tu ne l'avais pas mis au départ et que tu as répondu que tu ne voyais pas le problème... mais en fait si tu as vu le problème puisque tu as corrigé
Je pense que tu as compris la différence entre les deux, même si avec ton print tu ne peux pas le constater.
Fais plutôt ceci, et ainsi on pourra plus facilement constater l'intérêt du passage par référence puisque dans un cas $tab sera modifié et pas dans l'autre.
Code : Tout sélectionner
$tab=array("fRaNcE","aLlEmAgNe","eSpAgNe");
MajMin($tab);
print_r($tab);
Également, il reste encore des choses inutiles comme le return puisque l'intérêt est de modifier la variable d'origine.
EDIT : Grilled

Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:34
par Arrow9
Ah d'accord...
J'avais compris le principe mais j'avais pas compris comment l'appliquer...
Merci beaucoup !
Re: Aide fonction strtoupper et strtolower
Posté : 23 déc. 2015, 17:42
par or 1
$maj=substr($val,0,1);
plus simplement :
$maj=$val[0];