Changer plusieurs textes avec str_replace [Resolu]

Petit nouveau ! | 6 Messages

02 déc. 2011, 15:36

Bonjour à tous,

Pour mon premier poste, je vais faire demande ( viendra le jour ou je serai capable d'aider à mon tour ^^ ).

Étant un noob de première en php ( j'attaque tout juste les cours via quelques bons bouquins ) je viens de me faire le p'tit script suivant :

Code : Tout sélectionner

<html> <head> <title>Replace Html</title> </head> <body> <form method="post" action="replace.php"> <textarea name="texte" wrap=soft></textarea> <input type="submit" name="valider" value="Ok"> </form> </body> </html>
Je rempli donc mon formulaire textarea avec la phrase "Voyager en avion vaut mieux que voyager à pieds ^^" et je valide pour arriver sur ma page replace.php :

Code : Tout sélectionner

<?php $texte = $_POST['texte']; echo $texte; $changer = str_replace(" avion", " planeur", $texte); echo $changer; ?>
le mot "avion" est bien remplacé par "planeur", jusque la pas de souci majeur ;)

Mais j'aimerai par la suite changer plusieurs mots selon la phrase que j'écris.

Exemple :

J'écris dans mon textarea : "Il fait beau ce matin, j'aime le soleil"

J'aimerai remplacer "matin" par "midi".

Si je rajoute un $changer = str_replace(" matin", " midi", $texte); ca fonctionne pas de souci, mais comment faire pour avoir un genre de dictionnaire pour remplacer automatiquement un mot, sans avoir a ajouter a chaque fois une ligne : $changer = str_replace(" mot1", " mot2", $texte);

Faut il faire appel à une base dans laquelle j'aurai placé tout un tas de synonymes ?

Mon projet est il clair ? Besoin de plus d'explications peut être ? ^^

Merci d'avance :)
Modifié en dernier par bootx0 le 04 déc. 2011, 15:01, modifié 1 fois.

Mammouth du PHP | 1967 Messages

02 déc. 2011, 15:44

Si ton "dictionnaire" est grands, il est préfèrable de bien réfléchir à la manière de le stocker et d'y avoir accès.

Dans ton cas, je commencerais par utiliser la fonction str_replace dans sa forme str_replace(array1,array2,$text);
$array1 = array('Matin','Avion');//Complète ici tout les mots qui dooivent être remplacé
$array2 = array('Midi','Planeur');//Complète ici tous les mots qui remplace ceux de array1 (ATTENTION à l'ordre)
$changer = str_replace($array1, $aray2, $texte);
echo $changer;
µ

PS voir à utiliser stri_replace si tu veux gèrer les possibilité de majuscules
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 6 Messages

02 déc. 2011, 16:04

Merci spols ;)

C'est bien ce que je cherchais !

Par contre peut on changer aléatoirement un mot parmi 2 ou 3 autres ?

Exemple :

Mon texte : "Ce matin je suis aller au marché"

remplacer "marché" par un des mots suivants, aléatoirement : "parc, port, travail," etc.

ce qui me donnerai une phrase aléatoire comme : "Ce matin je suis allé au travail", "Ce matin je suis allé au parc", "Ce matin je suis allé au port", etc.

Comment je pourrai faire ça ?

toujours avec des array ?

Merci :)

Au fait, sympa ton site sur les rubik's cube, les soluces vont m'aider ^^

Mammouth du PHP | 1967 Messages

02 déc. 2011, 16:40

C'est possible, et il y a plusieurs moyens d'y arriver.
Le choix de la meilleur voie dépens de l'application finale de ton script. Si ce n'est que dans un but de test et d'apprentissage, tu en apprendras d'autant plus en cherchant comment faire que de t'expliquer un moyen d'y arriver. Savoir coder est une chose, mais savoir concevoir ses programmes est tout aussi important.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 6 Messages

02 déc. 2011, 16:55

C'est vrai, je confirme ;) Bon je vais déjà voir tout ceci plus en profondeur.

Peut être voir avec un array() et un rand derrière ^^

Le but est évidemment l'apprentissage et non pas la mise au point d'un soft de spinning ^^ Il y en a déjà de très bon, gratuit, mais c'est plus le coté "how it's work" qui m'intéresse !

Merci encore spols, bon week end :)

Petit nouveau ! | 6 Messages

02 déc. 2011, 23:32

J'ai trouvé un début de piste. Lorsque j'ecris la phrase suivante dans ma page formulaire.html ( dans le champ <textarea> ) :

"je suis allé au marche ce matin et suis allé prendre un avion juste après"

je valide mon formulaire et arrive sur la page replace.php :
<?php
$texte = $_POST['texte']; // récupération du texte du champ <textarea>
echo $texte.'<br /><br />'; // Affiche le texte original

srand ((double) microtime() * 10000000);

$input = array ("parc", "travail", "port", "coiffeur", "cinéma");
$rand_keys = array_rand ($input, 2);
$textes = $input[$rand_keys[0]]."\n";

$texte2 = str_replace("marché", $textes, $texte );

echo $texte2;
?>
ça me change bien aléatoirement le mot "marché" par un des mots de l'array() $input.

Mais quand j'essaie de changer 2 mots ( marché et avion par exemple ) c'est moins évident 8-| J'aimerai remplacer "avion" par "bateau", "velo", "camion", etc.

Quelqu'un aurait une piste ? Pas forcément la réponse exact mais juste un angle de reflexion ( dixit perceval ^^ )

Merci :)

Petit nouveau ! | 6 Messages

03 déc. 2011, 15:38

Personne n'a une petite idée pour ce script ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 déc. 2011, 16:18

tu peux passer des tableaux en paramètre de str_replace(). donc tu prépare ton tableau de valeur remplaçante avant le str_replace ainsi que le tableau de valeur a chercher.

il faut que les index correspondent pour que ça fonctionne comme tu le souhaite.

regarde l'exemple deux dans la doc de str_replce()

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

03 déc. 2011, 18:46

Merci moogli de ces précisions ;)

En effet, Spols m'avait ouvert la voie dans cette direction mais je rame un peu pour concrétiser tout ceci, étant un noob de première en php ^^

Je vais donc continuer dans cette voie la pour trouver le bon code.

Merci encore à vous 2 ;)

Je vous souhaite un très bon week end :)