2010-06-12 4 views
0

Ce que je veux faire est de remplacer le "[remplacer]" dans la chaîne d'entrée par la vaule correspondante dans le tableau de remplacement. Le nombre total de valeurs va changer mais il y aura toujours le même nombre dans le tableau de remplacement que dans la chaîne d'entrée. J'ai essayé de le faire avec preg_replace et preg_replace_callback mais je ne peux pas obtenir le motif correct pour [remplacer], j'ai aussi essayé d'utiliser vsprintf mais le% en <table width="100%"> était en train de tout gâcher. Toute aide est grandement appréciée!preg_replace remplacement par tableau

Remplacer une:

$array = array('value 1','value 2','value 3'); 

chaîne Entrée

$string = ' 
<table width="100%"> 
<tr> 
<td>Name:</td> 
<td>[replace]</td> 
</tr> 
<tr> 
<td>Date:</td> 
<td>[replace]</td> 
</tr> 
<tr> 
<td>Info:</td> 
<td>[replace]</td> 
</tr> 
</table> 
'; 

Résultat souhaité

<table width="100%"> 
<tr> 
<td>Name:</td> 
<td>value 1</td> 
</tr> 
<tr> 
<td>Date:</td> 
<td>value 2</td> 
</tr> 
<tr> 
<td>Info:</td> 
<td>value 3</td> 
</tr> 
</table> 
+1

Je suggère fortement à l'aide d'un analyseur HTML à la place. Non seulement il est mieux adapté à la tâche à accomplir, mais il sera probablement plus facile d'accomplir la fonctionnalité que vous désirez. – Amber

+0

@Amber hein? un analyseur pour cela? Je pense que vous avez mal lu la question. – Artefacto

+1

Je n'ai pas mal lu. Itérer à travers les éléments d'un arbre DOM analysé, les manipuler et les réécrire serait une solution beaucoup plus propre que regex. – Amber

Répondre

3

Vous échapper à la table de % avec %%:

$string = <<<EOD 
<table width="100%%"> 
<tr> 
<td>Name:</td> 
<td>%s</td> 
</tr> 
<tr> 
<td>Date:</td> 
<td>%s</td> 
</tr> 
<tr> 
<td>Info:</td> 
<td>%s</td> 
</tr> 
</table> 
EOD; 

$array = array('value 1','value 2','value 3'); 

echo vsprintf($string, $array); 

ouput:

<table width="100%"> 
<tr> 
<td>Name:</td> 
<td>value 1</td> 
</tr> 
<tr> 
<td>Date:</td> 
<td>value 2</td> 
</tr> 
<tr> 
<td>Info:</td> 
<td>value 3</td> 
</tr> 
</table> 
+0

Ah, merci, je ne pouvais pas trouver les informations d'échappement partout et je n'ai jamais eu à le faire avant, savez-vous d'une fonction qui fait cela? – Scott

+0

str_replace ('%', '%%', $ chaîne); fonctionne, merci! – Scott

Questions connexes