Rechercher/remplacer avec php+mySQL

WRInaute accro
Hello,

Je suis confronté à une petite difficulté, mais je pense qu'il y'a du monde ici qui saura comment faire.

J'ai d'une part une table de plusieurs centaines de lignes, sur deux colonnes:

[ champ1 | champ2 ]

J'ai d'autre part un texte, contenu dans $texte

Je voudrais pouvoir faire l'output de $texte_mod sachant que $texte_mod correspond à $texte, duquel chaque string qui correspond à une valeur de "champ1" aura été remplacé par l'équivalent de "champ2".

D'avance merci pour votre aide.
 
WRInaute accro
mettre champ1 dans un tableau, champ2 dans un autre, et faire un str_replace de tableau1 par tableau2 dans texte tout simple ne marche pas ?
 
WRInaute discret
Salut,
et avec un strtr ?
Code:
<?php
$trans = array("bonjour" => "salut", "salut" => "bonjour");
echo strtr("salut à tous, j'ai dit bonjour", $trans);
?>
 
WRInaute accro
J'ai une fonction existante, comme ceci:

Code:
function makechanges($text) {
	$changes= array(
		'this' => 'that',
		'here' => 'there'
	);

	return str_replace( array_keys($corrections), array_values($changes), $text );
}

...fonctionne bien, mais je ne sais pas comment alimenter $changes à la suite d'une requête, plutôt que comme ici "statique"... :roll:
 
WRInaute impliqué
Pour un truc temporaire, vite fait ...

Tu déclare en haut ta variable en global :

Code:
global $changes;

Ensuite tu gère la modification de ta variable et y a plus cas !

Code:
// début du script (du moins avant la "boucle")
global $changes;

// ta fonction
function makechanges($text) {

   return str_replace( array_keys($corrections), array_values($changes), $text );
} 

// requete
........

// modification de la variable $changes

   $changes= array(
      'this' => 'that',
      'here' => 'there'
   );

// appel de la fonction
....

// et on recommence
....

Sinon, tu peux aussi passer $changes en paramètre, tout comme $text.
 
WRInaute discret
Essaye ça :

Code:
$changes = array();
req = mysql_query("SELECT champ1, champ2 FROM table");
while( $donnees = mysql_fetch_assoc($req) ) {
    $champ1 = $donnees['champ1'];
    $changes[$champ1] = $donnees['champ2'];
}

$text_mod = str_replace( array_keys($corrections), array_values($changes), $text );
 
WRInaute occasionnel
lis la doc php sur ces fonctions :

ob_start();
ob_end_*();

notemment, tu peux leur passer une fonction filtrante.
Ca me parait le plus adapté à ton cas.
 
WRInaute occasionnel
tiens, un exemple tout cuit:


<?php

function callback($buffer)
{
// remplace toutes les pommes par des carottes
return (ereg_replace("pommes de terre", "carottes", $buffer));
}

ob_start("callback");

?>

<html>
<body>
<p>C'est comme comparer des carottes et des pommes de terre.</p>
</body>
</html>

<?php

ob_end_flush();

?>
 
WRInaute occasionnel
Solution prete a l'emploi ( mélange de la méthode ob_ et de posts plus haut )

<?php

$changes = array();
req = mysql_query("SELECT champ1, champ2 FROM table");
while( $donnees = mysql_fetch_assoc($req) ) {
$champ1 = $donnees['champ1'];
$changes[$champ1] = $donnees['champ2'];
}


function callback($buffer)
{
// remplace toutes les pommes par des carottes
return str_replace( array_keys($corrections), array_values($changes), $buffer );
}


// a partir de cette instruction, tous les mots seront replacés
ob_start("callback");

?>

<?php

ob_end_flush();
// fin du remplacement
?>
 
Discussions similaires
Haut