Заменить строку на увеличенное значение - PullRequest
0 голосов
/ 14 мая 2010

Я пытаюсь написать синтаксический анализатор CSS для автоматической отправки URL-адресов в фоновых изображениях в разные субдомены для распараллеливания загрузок.

По сути, я хочу заменить такие вещи, как

url(/assets/some-background-image.png)

с

url(http://assets[increment].domain.com/assets/some-background-image.png)

Я использую это внутри класса, который я в конечном итоге хочу развить для выполнения различных задач разбора CSS.

Вот соответствующие части класса:

private function parallelizeDownloads(){
    static $counter = 1;
    $newURL = "url(http://assets".$counter.".domain.com";

Счетчик должен быть сброшен, когда он достигает 4, чтобы ограничить до 4 поддоменов.

    if ($counter == 4) {
        $counter = 1;
    }
    $counter ++;
    return $newURL;
}

public function replaceURLs() {

В основном это чепуха, но я знаю, что код, который я ищу, выглядит примерно так. Примечание: $ this-> css содержит строку CSS.

    preg_match("/url/i",$this->css,$match);
    foreach($match as $URL) {
        $newURL = self::parallelizeDownloads();
        $this->css = str_replace($match, $newURL,$this->css);
    }
}

Ответы [ 2 ]

0 голосов
/ 15 мая 2010

Хорошо, наконец-то я заработал, используя preg_replace_callback.Вот код:

private function parralelizeDownloads($matches) {
    static $counter = 1;
    $newURL = '';
    foreach ($matches as $match) {
        $newURL = "url(http://assets" . $counter . ".domain.com";
        if ($counter == 4) {
            $counter = 0;
        }
        $counter++;
    }
    return $newURL;
}

public function replaceURLs() {
    $this->css = preg_replace_callback("/url\(/i", Array($this, "parralelizeDownloads"), $this->css);
}
0 голосов
/ 14 мая 2010

установить $ counter как свойство класса и ссылаться на него как $ this-> counter или self :: $ counter, если вы установите его как статическое свойство

Вы вызываете self ::rallelizeDownloads () в своем публичном методе replaceURLs (), поэтому функция642izeize () действительно должна быть определена как статическая

...