За последние 24 часа нас посетили 51716 программистов и 1761 робот. Сейчас ищет 821 программист ...

Как сделать цикл?

Тема в разделе "PHP для новичков", создана пользователем kit, 18 фев 2009.

  1. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Всем привет! Такая задача: есть массив, например $liter=array("a", "b", "c"), причем количество и значения элементов массива могут изменяться. Необходимо сделать скрипт, который бы выводил все возможные варианты последовательностей значений массива
    aaa
    aab
    aba
    abb
    baa
    bab
    bba
    bbb
    aac
    aca
    acc
    caa
    cac
    cca
    ccc
    ...
    и т.д.

    $diapazon - количество символов в строке, $j - количество знаков в массиве
    PHP:
    1.  
    2. <?
    3. $predel=pow($j, $diapazon);
    4. for ($i=0; $i<$predel; $i=$i+1)
    5.   {
    6.   $word="";
    7.   for ($c=0; $c<$diapazon; $c=$c+1)
    8.     {
    9.     $liter_= $liter[$i];
    10.     $word .=$liter_;
    11.     }
    12.   $word .="\r\n";
    13.   fwrite ($fd, $word);
    14.   }
    15.  
    код работает не правильно, выдает только aaa, bbb, ccc. Уже все мозги сломал, помогите составить код.
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. for ($a='aaa';$a<='zzz';$a++, print $a);
    3. ?>
     
  3. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Круто! А если $liter=array("a", "m", "x") или $liter=array("?", "1", "5")?
     
  4. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    Действительно круто! :)

    на основе этого кода

    сделал вот, нужно крутить дальше, что б добиться того, что ты хочешь kit

    PHP:
    1.  
    2. <?
    3. $a = array('aa');
    4. $b = array('zz');
    5.  
    6. for ($c=$a[0];$c<$b[0];$c++)
    7. {
    8.     var_dump($c)."<br>";
    9. }
    10. ?>
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. $array = array();
    3. $symbols = array('@', '#', '$');
    4. for ($i=0; $i < 1000; $i++) {
    5.     shuffle($symbols);
    6.     $variant = implode(null, $symbols);
    7.     if (!in_array($variant, $array)) {
    8.         $array[] = $variant;
    9.     }
    10. }
    11. sort($array);
    12. print_r($array);
    13. ?>
    :-D
     
  6. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    sizeof(array) - определяет размер массива

    PHP:
    1. $liter = array("?", "1", "5")
    2. for($i=0; $i<sizeof($liter); $i++) {
    3.     echo ($liter[$i]."<br>\n");
    4. }
    HTML:
    1. ?<br>
    2. 1<br>
    3. 5<br>
     
  7. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    [vs]
    ЯД !!! ета пядь :))
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    [vs]
    Присваиваю вам статус извращенца =)
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Гы-гы, а я часто так переборы делаю, когда сложный алгоритм писать влом )))
     
  10. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Devzirom мне не совсем это надо
    [vs] Жесть!
    Немного проясню задачу, я в первом посте неверно последовательность изобразил. Итак есть массив, например $liter=array("a", "1", "?"), причем количество и значения элементов массива могут изменяться. Необходимо сделать скрипт, который бы выводил все возможные варианты последовательностей значений массива. При $diapazon=3 (количество символов в строке)
    ааа \
    аа1 > сверху вниз а, 1, ?
    аа? /
    а1а
    а11
    а1?
    а?а
    а?1
    а??
    1аа
    1а1
    1а?
    11а
    111
    11?
    ... и т.д.
    Последовательность должна меняться как спидометр автомобиля, т.е. если смотреть на крайние правые цифры первых 3х слов сверху вниз, то можно увидеть а, 1, ? (элементы масива в том же порядке). Когда перебраны все элементы младшего разряда, то меняется старший разряд и т.д. Сложность в том, что $diapazon величина не постоянная и может изменяться юзером, т.е. вполне возможно
    аааа
    ааа1
    ааа?
    аа1а
    аа11
    аа1?
    ... и т.д.
    П А М А Г И Т Е ! ! !
     
  11. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    ОМГ!!! Это брутфорс, я его узнал!
     
  12. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Да хоть карбофос, мне все равно как это называется, я в этом не шарю. Как делать-то?
     
  13. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    Похоже на то, интересно кого он ломать собрался? :)
     
  14. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Китайцы решили взломать сервер Пентагона. Каждый житель китая вводил случайный пароль. По статистике каждый второй пароль оказался "Мао Дзедун". На пятьсот тридцать восемь миллионов двести девяносто пять тысяч четыреста сорок первой попытке сервер Пентагона согласился, что пароль "Мао Дзедун".
    Народ, пжл, не отвлекайтесь от темы!
     
  15. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Усе!!! Сам додумался! Кому надо пишите в личку, здесь даже боюсь постить. Обвиняете черт знает в чем, право даже не ловко как-то... :D
     
  16. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    ну дык скинь свое творение посмотреть то
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Да там наверняка будет 4 вложенных цикла.
     
  18. sylex

    sylex Активный пользователь

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
  19. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    Хамить изволите? :x Стал бы я из-за 4 циклов топик контентить! Всего 2 цикла! Ибо всякий брут матрица, но не всякая матрица брут (я сейчас не про ту матрицу где Нео и Опиус, а про обыкновенную математическую матрицу). Итак 2 цикла: первый генерирует символы в строке, второй генерирует сами строки. Контент заполняется по простому закону приращения, т.е. когда младший разряд достиг максимума, идет приращение старшего разряда и т.д.
    Интересно канеш, :roll: но че-то мудрено больно!
    Это запросто. Массив $liter[0] содержит любое число элементов
    PHP:
    1. <?
    2.         $diapazon=$_POST['min'];
    3.         $predel=pow($j, $diapazon);
    4.         $w=$j-1;
    5.         for ($l=0; $l<$diapazon; $l=$l+1) $word[$l]=0;
    6.         for ($l=0; $l<$diapazon; $l=$l+1)
    7.         {
    8.             echo $liter[0][$word[$l]];
    9.         }
    10.         echo "</br>";
    11.         for ($i=0; $i<$predel; $i=$i+1)
    12.         {
    13.             for ($n=0; $n<$diapazon; $n=$n+1)
    14.             {
    15.                 if ($word[$n]!==$w)
    16.                 {
    17.                     $word[$n]=$word[$n]+1; 
    18.                 }
    19.                 else
    20.                 {
    21.                     $word[$n]=0;
    22.                 }
    23.                 if ($word[$n]!==0)
    24.                 {
    25.                     for ($l=0; $l<$diapazon; $l=$l+1)
    26.                     {
    27.                         echo $liter[0][$word[$l]];
    28.                     }
    29.                     echo "</br>";
    30.                     break;
    31.                 }
    32.             }
    33.         }
    34.  
    35. ?>
    Результат: для $liter[0] = array('a','1','?');
    ааа
    1аа
    ?аа
    а1а
    11а
    ?1а
    а?а
    1?а
    ??а
    аа1
    1а1
    ?а1
    а11
    111
    ?11
    а?1
    1?1
    ??1
    аа?
    1а?
    ?а?
    а1?
    11?
    ?1?
    а??
    1??
    ???

    Апладисментов не надо, просто принесите мне в жертву миллион долларов :D
     
  20. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Палимся?
     
  21. kit

    kit Активный пользователь

    С нами с:
    18 дек 2006
    Сообщения:
    331
    Симпатии:
    1
    Адрес:
    местный
    karakh
    читаем помалеху, век живи как говорица