PHP заменяет строку на чередующиеся строки - PullRequest
0 голосов
/ 27 января 2011

У меня есть текст примерно такой:

    $sText =    
    "www.domain.com
     www.domain.com
     www.domain.com
     www.domain.com
     www.domain.com
     ...";

Теперь я хочу распределить домены по поддоменам (например, 3 поддоменам), поэтому результат должен выглядеть следующим образом:

$aSubs = array("www.sub1.domain.com", "www.sub2.domain.com", "www.sub3.domain.com"); 
$sResult =
"www.sub1.domain.com
www.sub2.domain.com
www.sub3.domain.com
www.sub1.domain.com
www.sub2.domain.com
..."

Спасибо за помощь ...

Ответы [ 3 ]

1 голос
/ 27 января 2011

Если у вас PHP 5.3:

preg_replace_callback($sText, "#www\.domain\.com#", function() {
    static $index = 0;
    $subdomains = array(
        "www.sub1.domain.com",
        "www.sub2.domain.com",
        "www.sub3.domain.com",
        "www.sub1.domain.com",
        "www.sub2.domain.com",
    );
    return $subdomains[$index++ % count($subdomains)];
});
1 голос
/ 27 января 2011

В вашем обратном вызове на замену сделайте что-то похожее на это:

static $i = 0;
'www.' . ($i++ % 3 + 1) . '.domain.com';

Я ухожу, чтобы написать регулярное выражение вам (поскольку вы не предоставили никаких подробностей).

PS: Ключевое слово static в функции относится к переменной, которая поддерживается между несколькими вызовами функции.

0 голосов
/ 27 января 2011

Это может сработать:

<?php
$count = 0;
$subdomains = array("www.sub1.domain.com", "www.sub2.domain.com", "www.sub3.domain.com");

$text = <<<XXX
www.domain.com
www.domain.com
www.domain.com
www.domain.com
www.domain.com
XXX;


function createSub($matches)
{
    global $subdomains,$count;
    $index = $count++ % count($subdomains);
    return $subdomains[$index];
}
echo preg_replace_callback(
            "#(www)(\..+)#m",
            "createSub",
            $text);     
...