par
joboy84 » 08 oct. 2008, 15:45
En fait je souhaite ajouter ces mots à des endroits non prédéfinis, dans le texte généré. Donc à un endroit au hasard, sans pour autant que 2 mots "fixes" puissent se suivre ou précéder.
Voila ce que j'ai fait pour le moment, en ayant cogité sur le sujet toute la journée:
<?php
$alphabet = range('a', 'z');
$language = null;
//On génère entre 100 et 500 mots
for($e = 0, $words = rand(100, 500); $e < $words; $e++)
{
//Un mot contient entre 2 et 10 caracteres
for($i = 0, $length = rand(2, 10); $i < $length; $i++)
$language .= $alphabet[array_rand($alphabet)];
$language .= ' ';
}
$pourcent = round($words*0.05);
echo $language;
//Génère les mots fixe x fois (correspondant aux 5%)
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array('gagné', 'perdu', 'rejouer');
$motfixe = array_rand($tableau, 2);
echo ''.$tableau[$motfixe[0]].' ';
}
?>
La première partie génère les mots et le texte. La seconde partie génère le nombre adéquat de "mots fixes".
Par contre après je cale vraiment, je ne vois pas où insérer le code de la seconde partie, dans la première, afin que les mots soient ajoutés au texte...
EDIT 5eme fois...:
J'ai essayé également en faisant:
<?php
$alphabet = range('a', 'z');
$language = null;
$texte = null;
$textefinal = null;
//On génère entre 100 et 500 mots
for($e = 0, $words = rand(100, 500); $e < $words; $e++)
{
//Un mot contient entre 2 et 10 caracteres
for($i = 0, $length = rand(2, 10); $i < $length; $i++)
$language .= $alphabet[array_rand($alphabet)];
$language .= ' ';
}
$pourcent = round($words*0.05);
//echo $language;
//Génère les mots fixe x fois (correspondant aux 5%)
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array("<b>soleil</b>", "<b>argent</b>", "<b>partir vacances</b>");
$texte .= $tableau[array_rand($tableau)];
$texte .= ' ';
}
//On fusionne les 2 textes
$texteEntier = ''.$language.' '.$texte.' ';
//Si ici je fais un echo, cela affiche le texte entier, avec les mots fixes listés à la fin.
//echo "<font color=red>$texteentier</font>";
// On explose l'array pour récupérer les mots
$texteEntier_explode = explode(' ', trim($texteEntier));
// On mélange les mots
shuffle($texteEntier_explode);
// On recoupe chaque mot séparé d'un espace
$texteFinal = implode(' ', $texteEntier_explode);
echo "<font color=red>$texteFinal</font>";
?>
Donc cela fonctionne plus ou moins ainsi...Il y a tout de même un problème...
Si je mets en mot fixe un seul mot, comme par exemple "soleil", cela me dispercera bien le mot n'importe où dans le texte. Par contre il y a un problème avec les mots composés comme "partir vacances". En effet, lorsque le script va tout mélanger, il va faire comme si "partir" et "vacances" étaient 2 mots distincts...et je voudrais qu'ils ne constituent qu'un mot.
Exemple:
Cela affiche: nvxdrr setrndzdv
partir lgo lpqt gnjf licrbe
vacances wmnrv
Et je voudrais que cela affiche: nvxdrr setrndzdv
partir vacances lgo lpqt gnjf licrbe wmnrv
RE edit:
Voila j'ai réussi à tout fusionner et a afficher les mots fixes tels quel, mais ils ne sont pas mélangés car ils sont contenus dans un seul $string
<?php
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array("<b>soleil</b>", "<b>argent</b>", "<b>partir vacances</b>");
$texte .= $tableau[array_rand($tableau)];
$texte .= ' ';
}
$tabfinal = array($texte);
// On explose l'array pour récupérer les mots
$texteEntier_explode = explode(' ', trim($language));
//On fusionne les 2 tableaux
$list = array_merge($texteEntier_explode, $tabfinal);
// On mélange les mots
shuffle($list);
// On recoupe chaque mot séparé d'un espace
$texteFinal = implode(' ', $list);
echo "<font color=red>$texteFinal</font>";
?>
Bref, après une journée et une nuit de cogitation, j'en suis la...
J'ai tout de même quelqu'un qui m' a aidé pour la partie mélange, notemment avec la fonction shuffle.
Svp aidez moi!
merci encore...
En fait je souhaite ajouter ces mots à des endroits non prédéfinis, dans le texte généré. Donc à un endroit au hasard, sans pour autant que 2 mots "fixes" puissent se suivre ou précéder.
Voila ce que j'ai fait pour le moment, en ayant cogité sur le sujet toute la journée:
[php]<?php
$alphabet = range('a', 'z');
$language = null;
//On génère entre 100 et 500 mots
for($e = 0, $words = rand(100, 500); $e < $words; $e++)
{
//Un mot contient entre 2 et 10 caracteres
for($i = 0, $length = rand(2, 10); $i < $length; $i++)
$language .= $alphabet[array_rand($alphabet)];
$language .= ' ';
}
$pourcent = round($words*0.05);
echo $language;
//Génère les mots fixe x fois (correspondant aux 5%)
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array('gagné', 'perdu', 'rejouer');
$motfixe = array_rand($tableau, 2);
echo ''.$tableau[$motfixe[0]].' ';
}
?>
[/php]
La première partie génère les mots et le texte. La seconde partie génère le nombre adéquat de "mots fixes".
Par contre après je cale vraiment, je ne vois pas où insérer le code de la seconde partie, dans la première, afin que les mots soient ajoutés au texte...
EDIT 5eme fois...:
J'ai essayé également en faisant:
[php]<?php
$alphabet = range('a', 'z');
$language = null;
$texte = null;
$textefinal = null;
//On génère entre 100 et 500 mots
for($e = 0, $words = rand(100, 500); $e < $words; $e++)
{
//Un mot contient entre 2 et 10 caracteres
for($i = 0, $length = rand(2, 10); $i < $length; $i++)
$language .= $alphabet[array_rand($alphabet)];
$language .= ' ';
}
$pourcent = round($words*0.05);
//echo $language;
//Génère les mots fixe x fois (correspondant aux 5%)
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array("<b>soleil</b>", "<b>argent</b>", "<b>partir vacances</b>");
$texte .= $tableau[array_rand($tableau)];
$texte .= ' ';
}
//On fusionne les 2 textes
$texteEntier = ''.$language.' '.$texte.' ';
//Si ici je fais un echo, cela affiche le texte entier, avec les mots fixes listés à la fin.
//echo "<font color=red>$texteentier</font>";
// On explose l'array pour récupérer les mots
$texteEntier_explode = explode(' ', trim($texteEntier));
// On mélange les mots
shuffle($texteEntier_explode);
// On recoupe chaque mot séparé d'un espace
$texteFinal = implode(' ', $texteEntier_explode);
echo "<font color=red>$texteFinal</font>";
?> [/php]
Donc cela fonctionne plus ou moins ainsi...Il y a tout de même un problème...
Si je mets en mot fixe un seul mot, comme par exemple "soleil", cela me dispercera bien le mot n'importe où dans le texte. Par contre il y a un problème avec les mots composés comme "partir vacances". En effet, lorsque le script va tout mélanger, il va faire comme si "partir" et "vacances" étaient 2 mots distincts...et je voudrais qu'ils ne constituent qu'un mot.
[u]Exemple: [/u]
Cela affiche: nvxdrr setrndzdv [b]partir[/b] lgo lpqt gnjf licrbe [b]vacances[/b] wmnrv
Et je voudrais que cela affiche: nvxdrr setrndzdv [b]partir vacances[/b] lgo lpqt gnjf licrbe wmnrv
RE edit:
Voila j'ai réussi à tout fusionner et a afficher les mots fixes tels quel, mais ils ne sont pas mélangés car ils sont contenus dans un seul $string
[php]<?php
for($fix = 0; $fix < $pourcent; $fix++)
{
//mots fixe
$tableau = array("<b>soleil</b>", "<b>argent</b>", "<b>partir vacances</b>");
$texte .= $tableau[array_rand($tableau)];
$texte .= ' ';
}
$tabfinal = array($texte);
// On explose l'array pour récupérer les mots
$texteEntier_explode = explode(' ', trim($language));
//On fusionne les 2 tableaux
$list = array_merge($texteEntier_explode, $tabfinal);
// On mélange les mots
shuffle($list);
// On recoupe chaque mot séparé d'un espace
$texteFinal = implode(' ', $list);
echo "<font color=red>$texteFinal</font>";
?> [/php]
Bref, après une journée et une nuit de cogitation, j'en suis la... :roll:
J'ai tout de même quelqu'un qui m' a aidé pour la partie mélange, notemment avec la fonction shuffle.
Svp aidez moi! |*()
merci encore...