[PHP] Рандомная замена слов

T
На сайте с 28.06.2007
Offline
82
1579

Всем привет.

Помогите пожалуйста.

Нужно рандомно заменить слова в тексте, так чтобы в тексте заменилось 5 рандомных вхождений.

Есть текст:

$text="текст текст текст текст текст текст текст";

$text = preg_replace("/(текст)/i", 'текст2', $text, 5);
echo $text;

Такой вариант заменяет с самого начала, т.е. не рандомно.

Нужно чтобы в результате было такое:

текст текст2 текст2 текст2 текст2 текст2 текст

или

текст текст2 текст2 текст текст2 текст2 текст2

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

Можно такое сделать?

Joker-jar
На сайте с 26.08.2010
Offline
171
#1

<?php


function callback($matches)
{
return rand(0, 1) ? 'текст2' : $matches[0];
}

$text="текст текст текст текст текст текст текст";
$text = preg_replace_callback("/(текст)/i", 'callback', $text);
echo $text;

?>
T
На сайте с 28.06.2007
Offline
82
#2

Joker-jar, спасибо.

А можно сделать чтобы пока 5 раз замены не произойдёт, функция не переставала работать?

Т.е. чтобы именно 5 раз rand(0,1) выдал 1.

Чтобы 5 замен в тексте было и функция завершила работу?

Может можно единицу сохранять в переменную и пока переменная меньше 5 выполнять функцию?

Joker-jar
На сайте с 26.08.2010
Offline
171
#3

Еще актуально? В таком случае, думаю, лучше не использовать функции preg_*, а написать собственную реализацию, тем более поиск идет по конкретной подстроке

Mad_Man
На сайте с 10.11.2008
Offline
162
#4

Hint: для большого количества замен стандартным рэндомизатором получить что-то уникальное нельзя, особенно, если пытаетесь размножать контент.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий