PHP: değiştirmeleri gerçekleştirmek için bir dizgesini çözümler

2 Cevap php

Ben bu gibi yapılandırılmış metin tabanlı kurallar bir grup var:

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

Bu ile gitmek (jQuery için) bir CSS sınıf kimliği her bir gruplandırılmış kod çevirir verilerin bir dizidir.

Aynı zamanda, aşağıdaki örnekte olduğu gibi daha basit yapıda bir dizi depolanan ID [code] çeviriler bir dizi vardır:

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

Bu, şu elde edilebilir önemlidir:

Ben bu gibi yapılandırılmış bir span etiketi ile [code] her örneğini değiştirmeniz gerekir:

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

Bu alanları olduğunu varsayarak

  • classname $ çevirmek dizinin sonucudur
  • hash her kural için statik bir md5 hash
  • offset alanın konumu dizede (örneğin, ilk örnekte, alan [XXX] 0 konumunda olan, [PN] 1 de ve benzeri) .

Bu bilgiye dayanarak, I Rule 1 için aşağıdaki çıktıyı elde etmek için beklediğiniz:

<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>

Herhangi bir yardım büyük ölçüde şu anda denemek ve bunu başarmak için str_replace kullanıyorum ama sadece yeterince iyi değil, takdir edilmektedir.

2 Cevap

Değerleri ile dize anahtarları yerine, tercüme dizi yineleme

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

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