script remplacement de mots

Eléphanteau du PHP | 25 Messages

23 juil. 2011, 15:35

Bonjour,

ça fait plusieurs jours que j'essaie d'arriver au bout de ce petit script, mais il me pose problème.

A partir d'une phrase, $phrase = "Le chat joue avec sa balle dans le salon"
je vais chercher des synonymes dans ma base avec une requête qui me donne 2 variables :
$groupe qui a pour valeurs "{Le chat|La chatte|Le chaton}" "{avec sa balle|a la balle|au ballon}" et " {salon|dressing}"
et $separe qui a pour valeurs "Le chat" "La chatte" " Le chaton" "avec sa balle" "a la balle" "salon" "dressing"
a la fin du script la phrase doit ressembler a ça : {Le chat|La chatte|Le chaton} joue {avec sa balle|a la balle|au ballon} dans le {salon|dressing}
mais pour l'instant, je n'arrive qu'a ça : Le {Le chat|La chatte|Le chaton} joue avec sa {avec sa balle|a la balle|au ballon} dans le {salon|dressing} avec ce code
<?php

$phrase = "Le chat joue avec sa balle dans le salon";

$texte_decoupe = explode(" ", $phrase);
foreach($texte_decoupe as $i => $value)
{

$req = mysql_query(ma requete qui fonctionne) or die(mysql_error());
$ligne = mysql_fetch_assoc($req);

$groupe = stripslashes($ligne["groupe"]);
$separe = stripslashes($ligne["separe"]);

$phrase1 .= "".preg_replace('#'.$separe.'#iU',"$groupe ",$separe)."";
$separe_decoupe = explode(" ",$separe);
$separe_value = array($value);

foreach($separe_decoupe as $sep)
$sep = array($sep);

$data3 = array_diff($separe_value,$sep);
$value3 = implode(' ',$data3);
$phrase1 .= "$value3 ";
}
echo $phrase1;

?>
le array_diff devrait me renvoyer les mots "joue" "dans" "le", mais le probleme est la un print_r de $sep me donne
Array ( [0] => ) Array ( [0] => chat ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => balle ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => salon )
et un print_r de $separe_value me donne
Array ( [0] => Le ) Array ( [0] => chat ) Array ( [0] => joue ) Array ( [0] => avec ) Array ( [0] => sa ) Array ( [0] => balle ) Array ( [0] => dans ) Array ( [0] => le ) Array ( [0] => salon )
comment faire pour que print_r de $sep soit
Array ( [0] => Le ) Array ( [0] => chat ) Array ( [0] => ) Array ( [0] => avec ) Array ( [0] => sa ) Array ( [0] => balle ) Array ( [0] => ) Array ( [0] => ) Array ( [0] => salon )

merci de votre aide

Mammouth du PHP | 2278 Messages

23 juil. 2011, 17:41

avant le foreach, s'assurer si ce n'est fait du contenu de separe_decoupe et separe_value ajout1
si c'est les valeurs que tu prévois : ajout2 et ajout3
print_r($separe_decoupe); //ajout 1
print"<br>";
print_r($separe_value); //ajout 1
foreach($separe_decoupe as $sep)
*print_r($sep) // ajout2
$sep = array($sep); // me parait étrange
*print_r($sep) // ajout3
$data3 = array_diff($separe_value,$sep);
$value3 = implode(' ',$data3);
$phrase1 .= "$value3 ";
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 25 Messages

23 juil. 2011, 19:48

Merci de ta réponse, mais je n'ai pas trop compris ce que tu voulais me dire, je n'ai pas d'ajout a faire
il suffit de comparer mes deux array et array_diff me renvoie les mots qu'il n'a pas trouvé dans array($sep)

quand je teste comme ceci
<?php 
$separe_value = array($value);
$sep = array("Le","chat","avec","sa","balle","salon");

$data3 = array_diff($separe_value,$sep);
$value3 = implode(' ',$data3);
$phrase1 .= "$value3 ";
 ?>
ça fonctionne bien

quand je fais un echo de $sep dans la boucle foreach sans transformer $sep en array le echo me retourne bien les mots "Le" "chat" "avec" "sa" "balle" "salon"
c'est quand je transforme $sep en array que ça ne fonctionne pas