0

次のように構成されたテキストベースのルールのグループがあります。

ルール 1: [PN] が [N] より大きい場合は [XXX] を行う
ルール 2: [PRD ..] を取得し、[X.XX] を追加する

これに対応するのは、グループ化された各コードを CSS クラス ID (jQuery 用) に変換するデータの配列です。

また、次の例のように、単純な構造化配列に格納された [ code ] から ID への変換の配列もあります。

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

次のことが達成できることが重要です。

[ code ] の各インスタンスを、次のような構造の span タグ に置き換える必要があります。

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

これは、フィールドが

  • classnameは $translate 配列の結果です
  • hashは、ルールごとに静的な md5 ハッシュです
  • offsetは、文字列内のフィールドの位置です (たとえば、最初の例では、フィールド[XXX]は位置 0、[PN]は位置 1 など)。

この情報に基づいて、ルール 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>

現在、str_replace を使用してこれを達成しようとしていますが、それだけでは十分ではありません。

4

2 に答える 2

0

わかりました、実際に必要なのはpreg_replace_callbackです。再帰コールバックの例を参照してください。

于 2009-03-25T17:27:16.067 に答える
0

文字列内のキーを値に置き換えて、変換配列を反復処理します。

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

foreach($translate AS $key=>$value)
{
$string = str_ireplace('[' . $key . ']', $value, $string);
}
于 2009-03-25T17:42:19.493 に答える