Page 1 sur 1

Position des caractères dans une chaine

Posté : 16 mai 2008, 22:06
par afowl
Salut à tous, :D

J'ai une chaine de texte normale, une position (par exemple 4 pour le quatrième caractère) et une longueur (de caractère, par exemple 2). J'aimerais pouvoir insérer du texte avant le caractère de la position connue et obtenir le mot qui commence au cinquième caractère et qui est long de 2 caractères.

Donc :
$chaine = 'Et un café';
echo fonction_x(4, 2, $chaine); // qui devrait retourner "un"
echo fonction_y(4, 'un thé ou ', $chaine); // qui devrait retourner "Et un thé ou un café"
Merci si vous avez des réponses :lol:

Posté : 16 mai 2008, 22:14
par Boro64
Bonsoir
Je ne voudrais pas dire une énorme bêtise, si c'est le cas on me corrigera, mais il me semble que le 1er caractère a toujours comme indice...0...

Posté : 17 mai 2008, 00:02
par Hywan
Hey :),

C'est exact. On commence toujours à partir de 0. Regarde du côté des manipulations de chaîne de caractères, et plus particulièrement la fonction substr().

Posté : 17 mai 2008, 06:06
par Boro64
Wouah ma première bonne réponse en php! :D
Trop fier je suis!

Posté : 17 mai 2008, 10:47
par Invité
Bonsoir
Je ne voudrais pas dire une énorme bêtise, si c'est le cas on me corrigera, mais il me semble que le 1er caractère a toujours comme indice...0...
J'avais oublié, merci. :D
Regarde du côté des manipulations de chaîne de caractères, et plus particulièrement la fonction substr().
Merci pour la fonction.

Persone n'a une idée pour la fonction d'insertion? :?:

Posté : 17 mai 2008, 11:05
par ouckileou
Persone n'a une idée pour la fonction d'insertion? :?:
Tu es allé voir la liste des fonctions de manip de chaînes ?

Si aucune ne le fait directement tu pourrais en utiliser d'autres pour faire la tienne, celle que t'as filé Hywan par exemple.

Posté : 17 mai 2008, 12:36
par Invité
Je suis allé voir les fonctions de manipulation de texte, et aucune ne peut le faire.

Je pense faire une fonction comme ça :
$chaine = 'Et un café';
$position = 2;
$chaine = substr($chaine, 0, $position).'un thé ou '.substr($chaine, $position, (strlen($chaine)-$position));

Posté : 17 mai 2008, 15:04
par FredoMkb
Bonjour :)

Voici 3 pistes :

1. On connaît l'emplacement (l'index) où placer le nouvel extrait :
$chaineOriginale = 'Et un cafe';
$extraitDebut = 3;
$extraitNouveau = 'un the ou ';
$chaineNouvelle = substr($chaineOriginale, 0, $extraitDebut).$extraitNouveau.substr($chaineOriginale, $extraitDebut);
echo $chaineNouvelle; // 'Et un the ou un cafe'
2. On ne connaît pas l'emplacement où placer le nouvel extrait, mais on connaît le premier extrait de texte devant lequel placer le nouvel extrait :
$chaineOriginale = 'Et un cafe';
$extraitOriginal = 'un';
$extraitNouveau = 'un the ou ';
$positionExtrait = strpos($chaineOriginale, $extraitOriginal);
$chaineNouvelle = substr($chaineOriginale, 0, $positionExtrait).$extraitNouveau.substr($chaineOriginale, $positionExtrait);
echo $chaineNouvelle; // 'Et un the ou un cafe'
3. On ne connaît pas l'emplacement où placer le nouvel extrait, mais on connaît le premier extrait de texte devant lequel placer le nouvel extrait et on est sûr que l'extrait repère est unique (il n'existe pas plusieurs fois dans le texte original) :
$chaineOriginale = 'Et un cafe';
$extraitOriginal = 'un';
$extraitNouveau = 'un the ou ';
$chaineNouvelle = str_replace($extraitOriginal, $extraitNouveau.$extraitOriginal, $chaineOriginale);
echo $chaineNouvelle; // 'Et un the ou un cafe'
Voilô... d'autres solutions sont également possibles, selon ce qu'on a exactement comme informations et données au départ, en utilisant les expressions régulières par exemple...

à+ :)