Случайная замена букв

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, главное работает D

8. ramzes (29.04.2011 / 14:27)
8. FaZaHaK, главное ужасно, а потом уже, работает или нет

9. Алексей (30.04.2011 / 02:21)
9. ramzes, напиши лучшеD

10. ramzes (30.04.2011 / 02:24)
Чти пост #3

11. Алексей (30.04.2011 / 13:57)
там ты заменяю 1 случайную букву на *. в моем примере заменяеться случайное количество букв в случайных местах на *, как и хотел афтар krut D

12. ramzes (30.04.2011 / 14:29)
12. FaZaHaK, писец, цикл это так сложно?)
я реализацию замены написал, а уж как автор ее применять будет, его дело.
в любом случае твоя функция корявая, strlen будет врать с кириллицей, и не только в этом;)
тащись дальше от себя

URL: https://visavi.net/topics/20961