2010-05-25 11 views
3

J'ai la chaîne comme ceci;Comment remplacer {tag_INDEX} par un élément de tableau [INDEX]

"String {TAG_0} texte {TAG_2} et {tag_1}"

Maintenant je dois remplacer tout {tag_INDEX} avec des éléments de tableau

$myArray = array('a','b','c'); 

donc après le remplacement il devrait ressembler à:

"String texte c et b"

Quelle est la meilleure façon de faire cela? Je suis en train avec preg_replace et preg_replace_callback mais sans bons résultats

Répondre

6
$newStr = preg_replace('/{tag_(\d+)}/e', '$myArray[\1]', $str); 
+0

Ne pas oublier d'affecter le résultat de 'preg_replace' soit, il ne remplace pas en place que certaines personnes semblent souvent croire. –

+0

@Matthew, merci, j'ai ajouté une affectation à ma réponse au cas où quelqu'un pourrait être confus par ce –

0

Exécuter un regex itérative avec limite de 1 à chaque itération et remplacer votre expression avec monTableau $ [n].

1

Pas regex nécessaire:

$s = "String {tag_0} text {tag_2} and {tag_1}"; 
$myArray = array('a','b','c'); 

$s = template_subst($s, $myArray); 
echo $s; 

// generic templating function 
function template_subst($str, &$arr) { 
    foreach ($arr as $i => &$v) { 
    $str = str_replace("{tag_$i}", $v, $str); 
    } 
    return $str; 
} 
+0

Par curiosité, pourquoi passez-vous le tableau par référence? –

+0

@Matthew: Pourquoi pas. Il n'y a pas grand intérêt à le copier. – Tomalak

Questions connexes