Bu [HTML Dizgeciklere ayırma / otomatik şablon üretimi] kırılmış olabilir?

0 Cevap php

Aşağıdaki HTML dizesini düşünün

<p>This is a paragraph tag</p> <font>This is a font tag</font> <div>This is a div tag</div> <span>This is a span tag</span>

Bu dize içinde bulunan metni tokenize işlenmiş ve biz aşağıdaki gibi 2 sonuçlar elde edilir

1) Token Array:

$tokenArray == array(
    'This is a paragraph tag',
    'This is a div tag',
    '<font>This is a font tag</font>',
    '<span>This is a span tag</span>'
);

2) tokenized şablonu:

$templateString == "<p>{0}</p>{2}<div>{1}</div>{3}";

Eğer dikkat ederseniz, orijinal HTML dizeleri metin dizeleri segmentlerinin dizisi dizgecikli şablondan farklı

PHP kodu aşağıda orijinal html dize maç için dizgecikli şablon ve buna göre belirteç dizi sipariş için kullanılan

class CreateTemplates {

    public static $tokenArray = array();
    public static $tokenArrayNew = array();

    function foo($templateString, $tokenArray)
    {
        CreateTemplates::$tokenArray = $tokenArray;
        $ptn = "/{[0-9]*}*/";   // Search Pattern from the template string

        $templateString = preg_replace_callback($ptn,
            array(&$this, 'callbackhandler'),
            $templateString);
        return $templateString;
    }

    private static function callbackhandler($matches) {

        static $newArr = array();
        static $cnt;

        $tokenArray = CreateTemplates::$tokenArray;
        array_push($newArr, $matches[0]);
        CreateTemplates::$tokenArrayNew[count($newArr)] =
            $tokenArray[substr($matches[0], 1, (strlen($matches[0]) - 2))]; 
        $cnt = count($newArr) - 1;
        return '{' . $cnt . '}';
    }
}

Nihai çıktı (şablon ve belirteç dizi emretti) olduğunu

$tokenArray == array('This is a paragraph tag',
    '<font>This is a font tag</font>',
    'This is a div tag',
    '<span>This is a span tag</span>'
);

$templateString == "<p>{0}</p>{1}<div>{2}</div>{3}";

Hangi beklenen sonucudur.

Şimdi, ben bu başarmak için doğru yol olup olmadığını emin değilim. Ben bu kod kırık veya nasıl görmek istiyorum.

  • Hangi koşullar altında bu kod kıracak? (Önemli)
  • Bunu başarmak için başka bir yolu var mı? (Daha az önemli)

0 Cevap