Position des caractères dans une chaine

Petit nouveau ! | 1 Messages

16 mai 2008, 22:06

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:

Eléphant du PHP | 250 Messages

16 mai 2008, 22:14

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...
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

ViPHP
ViPHP | 4674 Messages

17 mai 2008, 00:02

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().
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 250 Messages

17 mai 2008, 06:06

Wouah ma première bonne réponse en php! :D
Trop fier je suis!
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Invité
Invité n'ayant pas de compte PHPfrance

17 mai 2008, 10:47

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? :?:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 mai 2008, 11:05

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.

Invité
Invité n'ayant pas de compte PHPfrance

17 mai 2008, 12:36

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));

Eléphant du PHP | 224 Messages

17 mai 2008, 15:04

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...

à+ :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)