Помогите с рандомом.

Discussion in 'PHP' started by ATS_Tizer, 24 Apr 2012.

  1. ATS_Tizer

    ATS_Tizer New Member

    Joined:
    14 Mar 2011
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Всем доброго времени суток, сейчас пишу скрипт почтовика и для удобства пользователей есть необходимость в теле письма выполнить рандомизацию.

    Вот тело письма: {Петя|Вася|Коля|Толя} сегодня пошол в {школу|театр|кино|на дискотеку} таких конструкций {Петя|Вася|Коля|Толя} в теле будет не ограниченное количество.

    Результат:

    1. Петя сегодня пошол в школу
    2. Вася сегодня пошол в школу
    3. Коля сегодня пошол в школу
    4. Толя сегодня пошол в школу
    5. Петя сегодня пошол в театр

    Ну и так далее... Помогите с кодом на php, а то что-то с обработкой строк не очень дружу.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    С поиском и русским языком видимо тоже не очень дружить получается.

    https://forum.antichat.net/showpost.php?p=2511238&postcount=17494
     
    _________________________
  3. ATS_Tizer

    ATS_Tizer New Member

    Joined:
    14 Mar 2011
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Спасибо, да с русским тоже беда, а поиском я пользовался и ничего не нашёл.
     
  4. $QG

    $QG New Member

    Joined:
    25 Apr 2012
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    PHP:
    <?php
    $names 
    = array('Петя','Вася','Коля','Толя');      
    $locations = array('школу','театр','кино');      
    $count 5// сколько будет строчек   
         
    for($i 0$i $count$i++)echo $names[rand(1,count($names)) - 1].' пошел в '.$locations[rand(1,count($locations)) - 1].'<br />';
    ?>
    Редактируй только первые три строчки.
     
  5. Anarh1st

    Anarh1st Member

    Joined:
    19 May 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    Во-первых, ты налажал со скобочками =)
    PHP:
    $names[rand(1,count($names) - 1)]
    Так правильно будет.
    Во-вторых, ТСу нужно вовсе не это.

    ТС, можно парсить начиная с "{" и заканчивая "}", затем сделать explode(); и уже выводить случайный элемент массива.
     
  6. -=Zhenek=-

    -=Zhenek=- Elder - Старейшина

    Joined:
    31 Dec 2007
    Messages:
    271
    Likes Received:
    77
    Reputations:
    1
    http://xbb.uz/randomizator/text.bb

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


    вот еще

    PHP:
    while (preg_match("/\{([^{}]+?)\}/"$str)) 
     
    $strpreg_replace_callback("/\{([^{}]+?)\}/",create_function('$s','$a=explode("|",$s[1]);return $a[rand(0,count($a)-1)];'),$str);
     
    #6 -=Zhenek=-, 26 Apr 2012
    Last edited: 27 Apr 2012
  7. $QG

    $QG New Member

    Joined:
    25 Apr 2012
    Messages:
    2
    Likes Received:
    1
    Reputations:
    0
    Угу, все правильно я написал, "со скобочками".
    В вашем "правильном" варианте, получить нулевой индекс невозможно, в моем варианте все замечательно.
     
    1 person likes this.
  8. Anarh1st

    Anarh1st Member

    Joined:
    19 May 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    Прошу прощения, я привык ставить 0 в rand, поэтому не обратил внимания на единицу. Как обычно, сужу по себе)
     
  9. ATS_Tizer

    ATS_Tizer New Member

    Joined:
    14 Mar 2011
    Messages:
    0
    Likes Received:
    1
    Reputations:
    0
    Всем спасибо кто откликнулся, ну уже разобрался ))))