Случайная замена букв
1.
Дмитрий (23.04.2011 / 17:14)
Интересует вопрос как рандомно заменять символы в тексте, никак че-то не пойму принцип.
Я имею ввиду примерно такое:
допустим имеем слово "текст", надо сделать чтобы некоторые буквы заменяло на звездочки и было "текс*" потом к примеру "т*кс*" и тд
2.
yeshkin (23.04.2011 / 18:40)
функции сейчас не вспомню, а алгоритм таков:
0) создаешь пустой массив
1) берешь длину строки
2) от 0 до длины, уменьшенной на 1, делаешь рэндом
3) загоняшь в цикл от 0 до к-ва элементов массива - 1, сверяешь на совпадение. если есть, возвращаешся к 2)
4) заменяешь
5) добавляешь в массив[к-во элементов массива] вот то рендомное число
все это можно в цикл, ток массивчик сохраняй
Добавлено через 01:11 сек.
для длинных строк это не особо, там рендом пока попадет на 1 из 500 - юзер уснет, там вычурнее. если надо - пиши
3.
ramzes (23.04.2011 / 19:31)
<?
$text = 'text';
$text[mt_rand(0, mb_strlen($text, 'utf-8'))] = '*';
echo $text;
?>
использовать строку как массив пока еще ни кто не запрещал))
4.
Дмитрий (23.04.2011 / 19:33)
в прнципе я немного разобрался, но не совсем... заодно задам еще один вопрос дабы не создавать новой темы:
<?
SELECT * FROM table WHERE pole = '***'
/*
здесь вместо звездочек надо вставить цифру,
тобишь как выбрать из table,
pole, в котором содержатся только цифры?
Т.к. в pole записываютя значения и числовые, и буквенные, так вот мне нужно выбрать только числовые..
*/
Добавлено через 04:27 сек.
ramzes (23 Апреля 2011 / 19:31)
<?
$text = 'text';
$text[mt_rand(0, mb_strlen($text, 'utf-8'))] = '*';
echo $text;
?>
использовать строку как массив пока еще ни кто не запрещал))
----------
Вот так корректнее работает
<?
$text = 'text';
$text[mt_rand(0, mb_strlen($text-1, 'utf-8'))] = '*';
echo $text;
но при таком раскладе заменяет только одну букву в слове
5.
Алексей (28.04.2011 / 23:35)
вот мой велосипед гг:
<?php
function _replace(&$str, &$trans)
{
for ($i = 0; $i < strlen($str); $i++)
if (rand(0,1) and isset($trans[$str[$i]]))
$str[$i] = $trans[$str[$i]];
}
$trans = array(
'а' => '*',
'б' => '*',
'в' => '*',
'г' => '*',
'д' => '*',
'е' => '*',
'ё' => '*',
'ж' => '*',
'з' => '*',
'и' => '*',
'й' => '*',
'к' => '*',
'л' => '*',
'м' => '*',
'н' => '*',
'о' => '*',
'п' => '*',
'р' => '*',
'с' => '*',
'т' => '*',
'у' => '*',
'ф' => '*',
'х' => '*',
'ц' => '*',
'ч' => '*',
'ш' => '*',
'щ' => '*',
'ъ' => '*',
'ы' => '*',
'ь' => '*',
'э' => '*',
'ю' => '*',
'я' => '*',
);
$str = 'тут текст';
_replace($str, $trans);
echo $str;
?>
6.
Nu3oN (29.04.2011 / 00:42)
FaZaHaK (28 Апреля 2011 / 23:35)
вот мой велосипед гг:
<?php
function _replace(&$str, &$trans)
{
for ($i = 0; $i < strlen($str); $i++)
if (rand(0,1) and isset($trans[$str[$i]]))
$str[$i] = $trans[$str[$i]];
}
$trans = array(
'а' => '*',
'б' => '*',
'в' => '*',
'г' => '*',
'д' => '*',
'е' => '*',
'ё' => '*',
'ж' => '*',
'з' => '*',
'и' => '*',
'й' => '*',
'к' => '*',
'л' => '*',
'м' => '*',
'н' => '*',
'о' => '*',
'п' => '*',
'р' => '*',
'с' => '*',
'т' => '*',
'у' => '*',
'ф' => '*',
'х' => '*',
'ц' => '*',
'ч' => '*',
'ш' => '*',
'щ' => '*',
'ъ' => '*',
'ы' => '*',
'ь' => '*',
'э' => '*',
'ю' => '*',
'я' => '*',
);
$str = 'тут текст';
_replace($str, $trans);
echo $str;
?>
Афигеть... Я это даже велосипедом назвать не могу...
Это мегакостыльная функция которую я видел гг
7.
Алексей (29.04.2011 / 00:49)
7.
Nu3oN, главное работает
8.
ramzes (29.04.2011 / 14:27)
8.
FaZaHaK, главное ужасно, а потом уже, работает или нет
9.
Алексей (30.04.2011 / 02:21)
9.
ramzes, напиши лучше
10.
ramzes (30.04.2011 / 02:24)
Чти пост #3
11.
Алексей (30.04.2011 / 13:57)
там ты заменяю 1 случайную букву на *. в моем примере заменяеться случайное количество букв в случайных местах на *, как и хотел афтар
12.
ramzes (30.04.2011 / 14:29)
12.
FaZaHaK, писец, цикл это так сложно?)
я реализацию замены написал, а уж как автор ее применять будет, его дело.
в любом случае твоя функция корявая, strlen будет врать с кириллицей, и не только в этом;)
тащись дальше от себя
URL:
https://visavi.net/topics/20961