2009-03-25 8 views
0

j'ai un ensemble de règles à base de texte qui sont structurés comme ceci:PHP: Parse une chaîne pour effectuer des remplacements

 
Rule 1: Do [XXX] when [PN] greater than [N] 
Rule 2: Get [PRD ..] and add [X.XX] 

Pour aller avec c'est un tableau de données qui se traduit chaque code regroupées en une classe CSS ID (pour jQuery).

J'ai aussi un tableau de traductions de [Code] à ID stocké dans un simple tableau structuré, comme l'exemple suivant:

$translate = array(
    'XXX' => 'gen-string-input', 
    'PN' => 'gen-positivenumber-input', 
    'N' => 'gen-number-input' 
); 

Il est important que les éléments suivants peuvent être atteints:

J'ai besoin de remplacer chaque instance de [Code] avec une balise span qui est structuré comme suit:

<span class="[classname]" unique="[hash]" offset="[offset]">[CODE]</span> 

Cela suppose que les champs sont

  • classname est le résultat de la $ traduire tableau
  • hachage est un hachage md5 qui est statique pour chaque règle
  • décalage est la position du champ dans la chaîne (par ex. dans le premier exemple, le champ [XXX] est à la position 0, [PN] à la position 1 et ainsi de suite).

Sur la base de ces informations, je vous attendre à obtenir la sortie suivante pour Règle 1:

<p> 
    Do <span class="gen-string-input" 
      unique="[md5]" 
      offset="0">[XXX]</span> 
    when <span class="gen-positivenumber-input" 
       unique="[md5]" 
       offset="1">[PN]</span> 
    greater than <span class="gen-number-input" 
         unique="[md5]" 
         offset="2">[N]</span> 
</p> 

Toute aide est grandement appréciée, je suis actuellement en utilisant str_replace pour essayer de réaliser cela, mais il est juste pas assez bon.

+0

Je comprends à peine ce que vous demandez ... pourriez-vous s'il vous plaît poster un exemple de code? Où sont stockés XXX et PN? Comment sont-ils liés au tableau $ translate? – Seb

Répondre

0

itérer au sein de traduire tableau, remplacer les clés de la chaîne avec les valeurs

 
$string = '[CODE]'; 
$translate = array('classname' => 'oddRow', 'hash' => 'abcdef'); 

foreach($translate AS $key=>$value) 
{ 
$string = str_ireplace('[' . $key . ']', $value, $string); 
} 
Questions connexes