Перебор всех возможных комбинаций из символов

Тема в разделе "Как сделать...", создана пользователем konoplya, 3 май 2013.

  1. konoplya

    konoplya Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    88
    Симпатии:
    16
    В общем суть вопроса такова. Как сделать перебор и вывод всех возможных комбинаций на основе имеющихся символов?

    Например, у меня есть символы : "a,b,c". Как сделать перебор, чтобы мне выдало:

    а
    аа
    ааа
    b
    bb
    bbb
    c
    cc
    ccc
    ab
    ac
    aab
    aac
    ba
    bba
    bc
    bca
    ....(и так далее)

    нашёл такой пример:


    но он чёто совсем не пашет :(
     
  2. Viodele

    Viodele Механик

    Administrator
    Регистр.:
    17 дек 2011
    Сообщения:
    114
    Симпатии:
    486
    Поехали по порядку.

    PHP:
    $words 'abc123'//массив
    Это явно не массив. Вместо массива подставлена обычная текстовая строка.

    PHP:
    $symbols[] = $size[$i].$size[$m].$size[$x];
    Какого черта строка комбинации формируется не из массива символов, а из переменной длины массива?

    Кроме того, в таком виде, как сейчас, будут формироваться только трехзначные комбинации.

    Рабочий код:
    PHP:
    <pre>
    <?php
    $words 
    = array ('a''b''c''1''2''3');

    $size count ($words);

    $symbols = array ( );

    for (
    $i 0$i $size$i++) {
        
    $symbols[] = $words[$i];
        for (
    $m 0$m $size$m++) {
            
    $symbols[] = $words[$i].$words[$m];
            for (
    $x 0$x $size$x++) {
                
    $symbols[] = $words[$i].$words[$m].$words[$x];
            }
        }
    }
    print_r($symbols);
    ?>
    </pre>
     
    konoplya нравится это.
  3. konoplya

    konoplya Постоялец

    Регистр.:
    3 авг 2008
    Сообщения:
    88
    Симпатии:
    16
    А понял, теперь и правда рабочий.)) То бишь, если выводить не три, а, к примеру, четыре знака, то получится та же самая конструкция с новым циклом:







    И если символов под вывод требуется больше, вводится дополнительный цикл.

    Единственное, при таком подходе конструкция получается громоздкой. А как ему тогда сказать, чтобы он автоматом перебрал и вывел все возможные варианты из имеющихся в массиве символов?