Page 1 sur 1
remplacer le dernier caractère d'une chaine
Posté : 28 mars 2007, 13:09
par orgerix
Bonjour,
J'aimerais savoir comment on fait pour remplacer le dernier caractère d'une chaine. Je sais qu'il y a une fonction qui permet de faire ca, mais j'ai oublié laquelle et je ne la retrouve pas...
Posté : 28 mars 2007, 13:34
par Expreg
Des pistes :
- str_replace()
- strlen()
- substr()
- strrpos()
Tu as de quoi !

Posté : 28 mars 2007, 13:36
par raptor
<?php
$chaine = "ma chaien de caracteres"; // chaine a traiter
$str = "&"; // caractère à mettre à la fin
## Option expression régulière ##
$masque = "^(.*)(.)$";
$replace = "\\1";
$chaine_finale = ereg_replace($masque,$replace.$str,$chaine);
## Option substr() ##
$chaine_finale = substr($chaine,0,-1).$str;
echo $chaine_finale;
?>
par exemple quoi
Posté : 28 mars 2007, 13:37
par Expreg
Euh, t'as pas plus lourd raptor ?

Posté : 28 mars 2007, 13:58
par Ryle
## Option substr() ##
$chaine_finale = substr($chaine,0,-1).$str;
Je vois difficilement comment faire plus léger ?
Aller c'est vrai, on peut envisager un $chaine[strlen($chaine)-1] = $str;, ca fait deux caractères de moins

Posté : 28 mars 2007, 14:12
par Expreg
Je vois difficilement comment faire plus léger ?
Je parlais de la version ereg_replace()
Posté : 28 mars 2007, 20:40
par raptor
Je donnais uniquement des exemples, afin de montrer qu'a une question ilo ya souvent nombre de solution. J'ai pris soin justement de donné une des solutions les plus interessantes en terme de ressource machine juste après.
Posté : 28 mars 2007, 22:11
par naholyr
Pour développer en rappelant quelques bonnes habitudes :
TOUJOURS utiliser les fonctions de remplacement fixe (str_replace & co), sauf quand on est vraiment obligé de passer par une expression régulière.
TOUJOURS utiliser les PCRE (preg_*), sauf dans le cas extrème où l'extension pcre n'est pas activée (ce cas existe-t-il ?).
@Expreg
On est d'accords que ce sont des bonnes pratiques, mais il y a des moyens un peu moins concis de le faire comprendre. Tu devrais vraiment cesser de résumer ta pensée en 3 mots, en espérant que la personne en face comprendra d'office ce que tu n'as pas dit. Au lieu de "T'as pas plus lourd ?" il convient mieux de dire "Je rappelle que les fonctions ereg_* sont des gouffres à ressources" (ce n'est toujours pas parfait, mais c'est déjà beaucoup mieux).