Remplacer chaine de caractère à une position donnée

gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 10:15

Bonjour,
je cherche une fonction proche de "str_pad" qui me permettrai de remplacer dans une chaine de caractère, une string (plus petite) par une autre à partir d'une position connue.

Exemple:

Code : Tout sélectionner

chaine de caract: MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLAAAAAAAAAAIGRNTNGVITKDEAEKLFNQD String(chaine à rechercher dans la chaine de caract) à la position 39 et d'une longueur de 10 caractères AAAAAAAAAA
J'ai donc besoin d'une fonction qui permettrai de remplacer cette chaine de AAA... à la position 39 (si il ya une autre chaine identique dans la chaine de caract elle ne doit pas être modifié) par une chaine de XXX... de la même longueur.
J'ai stoké dans une tableau toutes les positions, les longueurs des chaines ...
Je suis partit sur strlen mais je ne voie pas comment remplacer une fois la chaine renvoyé.

Meci d'avance pour votre aide

gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 10:42

J'ai aussi vu quelque part qu'il était posible d'utiliser $value[$key]="X";
Le seul problème avec cette fonction est qu'elle ne remplace que le premier caratère
pour le même exemple :
MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLXAAAAAAAAAIGRNTNGVITKDEAEKLFNQD

J'ai donc essayé de l'adapter en essayant de rajouter autant de "X" que la longueur de la chaine mais cela ne fonctionne pas:
$value[$key]="X*{$nb}";

ViPHP
ViPHP | 5462 Messages

27 avr. 2010, 10:45

hello, un simple str_replace replace ferais l'affaire, utilise le paramètre count pour en prendre compte qu'un seul :wink:

gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 10:50

Je ne sais pas si cette fonction sera efficace car même en mettant le paramètre "count" à 1, si la premiere ocurence n'est pas la chaine à remplacer (diff de la position) alors cela ne fonctionnera pas.
N'existe t-il pas un moyen d'adapter le nombre de "X" pour qu'il y'en ai le même nombre que $nb?

"X*$nb"

ViPHP
ViPHP | 5462 Messages

27 avr. 2010, 10:53

comment tu sais a quelle endroit de la chaine c'est a remplacer ?

EDIT : regarde du coté du substr_replace
Modifié en dernier par stealth35 le 27 avr. 2010, 10:55, modifié 1 fois.

gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 10:54

Autant pour moi, cette fonction $value[$key]="X*$nb"; ne permet que de remplacer un seul caratère.

C'est une valeur que je récupérer avec les string que je dois remplacer, j'ai la position de cette string dans la chaine de caratère et la string elle même.

Mammouth du PHP | 672 Messages

27 avr. 2010, 11:06

La fonction substr_replace() devrait faire toon bonheur...
$chaine = "MNIFEMLRIDEGLRLKIYKDTEGYYTIGIGHLLTKSPSLAAAAAAAAAAIGRNTNGVITKDEAEKLFNQD";
$replace = "AAAAAAAAAA";
$pos = 39;
$long = strlen($replace);
echo substr_replace($chaine, $replace, $pos, $long);

gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 11:19

Merci beaucoup la fonction fait exactement ce que je voulais =D>
Le seul problème qui me reste est que je dois adapter le nombre de "X" qui doit être egal à la longueur de la chaine que je remplace.
Tout le reste fonctionne très bien.
J'ai essayé "X*$nb" et de nombreux derivé mais aucun ne fonctionne

ViPHP
ViPHP | 5462 Messages

27 avr. 2010, 11:39


gui
Eléphant du PHP | 100 Messages

27 avr. 2010, 14:11

Ok merci pour tout

Autre solution en boucle:

for($a=0;$a<$nb;$a++){ 
        $x.="X";
}