Artan değeri ile dize değiştirin

2 Cevap php

Ben otomatik olarak indirme parallelize için farklı alt etki alanları için arka plan görüntüleri URL'leri göndermek için bir CSS ayrıştırıcı yazmaya çalışıyorum.

Temelde, ben gibi şeyler değiştirmek istiyor

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

ile

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

Ben sonunda çeşitli CSS ayrıştırma görevleri yaparken dönüşmeye istediğiniz bir sınıf içinde bu kullanıyorum.

Burada sınıfın ilgili parçaları şunlardır:

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

Sayacı 4 ulaştığında 4 alt etki alanları sınırlamak için sıfırlanması gerekiyor.

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

public function replaceURLs() {

Bu çoğunlukla saçmalıktır, ama ben biraz böyle görünüyor arıyorum kodunu biliyorum. Not: $ this-> css CSS dizesini içerir.

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

2 Cevap

Tamam, ben nihayet preg_replace_callback kullanarak çalışma var. İşte kod:

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);
}

sınıfının bir özelliği olarak sayaç $ set ve statik bir özellik olarak ayarlarsanız, $ this-> sayaç veya self :: $ sayaç olarak başvuru

ParallelizeDownloads () gerçekten statik olarak tanımlanması gerektiği, bu yüzden) yöntemi (genel replaceURLs içinde kendini :: parallelizeDownloads () diyorlar