Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Шаблоны


Автор: Another 16.4.2009, 17:11
Такая проблема... Есть код, который заменяет в шаблоне определенное слово на рандомную фразу. Как сделть, что б все замены в шаблоне делались уникальными а не одной и той же фразой?
Конкретнее... Есть:
Код


$file="files.txt";

$array=file($file);

 $fraza=$array[rand(0,count($array)-1)];

$template=str_replace("слово",$fraza,$template);


На выходе все слова "слово" заменяются одной фразой, а нужно чеб при кождой замене заново выполнялся код подбора случайной фразы. Как это осуществить?

Автор: enof 16.4.2009, 17:16
http://php.net/preg_replace_callback

Автор: Another 16.4.2009, 17:19
И как в этом случае замену делать?

Автор: enof 16.4.2009, 17:23
В мане что-то не ясно написано?
Код

function return_rand()
{
    return "рандомная фраза";
}
$template = preg_replace_callback("#слово#", "return_rand", $template);

Автор: skyboy 16.4.2009, 17:25
http://ua.php.net/manual/ru/function.preg-replace-callback.php + static-переменная в callback-функции, в которую складывай уже использованные для замены слова.

Автор: Another 16.4.2009, 20:45
skyboy smile 
Можно пример?

Добавлено через 1 минуту и 54 секунды
Можно это какт из моего примера сделать?

Автор: enof 16.4.2009, 21:09
Пост для кого написан?  http://forum.vingrad.ru/index.php?showtopic=255804&view=findpost&p=1844514
Самому не додумать?
Как вариант:
Код

$array = array(); // Массив с фразами.
shuffle($array); //перемешиваем
$cnt = 0; //Счетчик
function return_rand()  //Callback функци.
{
    global $array,$cnt;
    return $array[$cnt++];
}
$template = preg_replace_callback("#слово#", "return_rand", $template);

Автор: Another 16.4.2009, 22:23
Всем спасибо, вопрос решен. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)